標籤:字元集 rem 左外串連 外串連 ima max avg cte and
Mysql概述
MySql是一種關係型資料庫
串連到mysql資料庫:mysql -u root -p
什麼是SQL:結構化的查詢語句
SQL分類:
DDL:資料定義語言 (Data Definition Language)
* create,alter,drop...
DML:資料操縱語言
* update,insert,delete
DCL:資料控制語言
* grant,if..
DQL:資料查詢語言
* select
資料庫增刪查改
建立資料庫:文法:create database 資料庫 [character 字元集 collate 校對規則]
查看資料庫:
查看所有資料庫:show databases;
查看某個資料庫:show create database 資料庫名;
修改資料庫:文法:alter database 資料庫名 character 字元集 collate 校對規則
刪除資料庫:文法:drop database 資料庫名;
切換資料庫:use 資料庫名;
查看當前使用資料庫:select database();
資料庫表操作
建立表文法:
create table 表名 (
欄位名 類型(長度) 約束,
欄位名 類型(長度) 約束,
欄位名 類型(長度) 約束
);
資料類型:
Java類型: MySQL:
byte/short/int/long tinyint/smallint/int/bigint
String char/varchar
* 區別?char是固定長度的字串,varchar可變長度的字串.
* char(8) 和 varchar(8)
* 如果插入一個字串hello 插入到char 那麼 插入hello .插入到varchar中 插入hello
float float
double double
boolean bit
Date date/time/datetime/timestamp
* datetime和timestamp都是既有日期又有時間的日期類型
* 區別? datetime需要使用外部傳入的日期.如果沒傳這個值就是Null. timestamp會使用系統當前的時間作為這個值的預設值.
文字檔 Text
二級制檔案 BLOB
***** Oralce使用CLOB/BLOB
***** MYSQL中除了字串類型需要設定長度其他的類型都有預設長度******
單資料表條件約束:
* 主鍵約束:primary key (預設就是唯一非空的)
* 唯一約束:unique
* 非空約束:not null
- 建立一個表:
- ***** 建立表之前先選擇資料庫:use 某個資料庫;
create table employee(
eid int primary key auto_increment,
ename varchar(20) not null,
email varchar(30) unique,
birthday date,
job varchar(20),
resume text
);
【表的查看】
* show tables;
* desc 表名;
【表的刪除】
drop table 表名;
【表的修改】
* alter table 表名 add 列名 類型(長度) 約束;
* alter table employee add image varchar(50);
* alter table 表名 drop 列名;
* alter table employee drop job;
* alter table 表名 modify 列名 類型(長度) 約束;
* alter table employee modify image varchar(80) not null;
* alter table 表名 change 舊列名 新列名 類型(長度) 約束;
* alter table employee change image eimage varchar(60);
* rename table 舊錶名 to 新表名;
* rename table employee to user;
* alter table 表名character set 字元集;
* alter table user character set gbk;
*******使用SQL操作資料庫中的表的記錄(對錶的記錄的CRUD的操作)******
【插入記錄】
* insert into 表名 (列名,列名,...) values (值1,值2,...); ---插入指定列的值
* insert into 表名 values (值1,值2,...); ---插入所有列的值
* 列名的個數與值的個數對應.
* 列的類型與值的類型對應.位置也要對應.
* 列的類型如果是字串或者日期,寫值的時候使用單引號將值引起來.
* 插入的值的最大長度不能超過列的最大長度.
【修改記錄】
* update 表 set 列名=值,列名=值 [where 條件];
* 列名和實值型別也要一致.
* 值不能超過列的最大長度.
* 值是字串或日期,需要使用單引號.
* 修改employee表中所有記錄的job為WORKER
* update employee set job=‘WORKER‘;
* 修改employee表將name為aaa的郵箱改為[email protected]
* update employee set email = ‘[email protected]‘ where ename = ‘aaa‘;
* 修改employee表將name為bbb的郵箱改為[email protected]同時修改job為HR
* update employee set email = ‘[email protected]‘ , job=‘HR‘ where ename=‘bbb‘;
【刪除記錄】
* delete from 表 [where 條件];
* 刪除表中的一行記錄,不能刪除某列值
* 如果沒有條件刪除表中的所有列.
* 刪除id為8的記錄:
* delete from employee where eid = 8;
* 刪除所有記錄:
* delete from employee;
- 刪除表中的所有記錄truncate table 表名 和 delete from 表 區別?
* 區別:
* truncate table 刪除表的記錄:將整個表刪除掉,重新建立一個新的表.truncate屬於DDL.
* delete from 刪除表的記錄:一條一條進行刪除. delete屬於DML。
* 交易管理 只能作用在DML語句上.如果再一個事務中使用delete刪除所有記錄,可以找回.
【基本查詢】
* select [distinct] *|列名 from 表 [where 條件];
【條件查詢】
條件的關鍵字:
= , > , >= , <, <= , <>
like中可以使用預留位置: _ 和 % :底線匹配一個字元, %:可以匹配任意多個字元.
【排序查詢】
`order by 對資料進行排序.預設升序. (asc升序,desc降序)
【彙總函式】
`sum() 求和
`count() 統計
`max() 最大值
`min() 最小值
`avg() 平均數
【分組】
group by
* 交叉串連:
* select * from A,B; --- 獲得的是兩個表的笛卡爾積.
* 內串連: inner join -- inner 可以省略
* 顯式內串連:select * from A inner join B on 條件;
* 隱式內串連:select * from A,B where 條件;
* 外串連:outer join -- outer 可以省略
* 左外串連:left outer join -- select * from A left outer join B on 條件;
* 右外串連:right outer join -- select * from A right outer join B on 條件;
【多表查詢的子查詢】
- 一個SQL語句查詢的過程中需要依賴另一個查詢語句.
SELECT * FROM customer c,orders o WHERE c.cid = o.cid AND c.cid IN (SELECT cid FROM orders WHERE addr LIKE ‘海澱%‘);
MySql基礎知識總結