三種sql語句:html
SQL語言主要用於存取數據、查詢數據、更新數據和管理關係數據庫系統,SQL語言由IBM開發。SQL語言分爲3種類型: #一、DDL語句 數據庫定義語言: 數據庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER #二、DML語句 數據庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT #三、DCL語句 數據庫控制語言: 例如控制用戶的訪問權限GRANT、REVOKE
#1. 操做文件夾(庫)
增:create database db1 charset utf8;
能夠由字母、數字、下劃線、@、#、$ 區分大小寫 惟一性 不能使用關鍵字如 create select 不能單獨使用數字 最長128位
查:show databases;
show create database db1;
select database();
選擇數據庫:USE db1;
刪除: drop database db1;
改:alter database db1 charset latin1;
只能修改庫的字符集,改不了其餘。
操做文件(表)
先切換到文件夾下:use db1
create table t1(id int) engine=innodb default charset=utf-8; 增:create table 表名(
字段名1 類型[(寬度) 約束條件],
字段名2 類型[(寬度) 約束條件],
字段名3 類型[(寬度) 約束條件]
);
1. 在同一張表中,字段名是不能相同
2. 寬度和約束條件可選
3. 字段名和類型是必須的
複製表:create table t2 select * from t1; 不會複製主鍵、外鍵和索引
只複製表結構:create table t2 like t1;
create table t2 select * from t1 where 1=2; #設置一個不存在的條件
查:show tables
desc t1;
刪:drop table t1;
改:alter table t1 rename t2; #修改表名
alter table t1 engine=innodb; #修改表引擎
修改字段:
alter table t1 modify name char(3); #修改字段約束條件,不能改字段名
alter table t1 change name name1 char(2); #change能夠修改字段名同時能夠修改字段約束條件
注意:修改約束條件的時候必須與建立字段時同樣將各屬性寫完整了,可是有個例外,給主鍵設置自增時,不能寫primary key,不然會報多主鍵錯誤。
刪除主鍵也不用常規modify的方式,須要:alter table t1 drop primary key;
增長字段:
alter table t1 add id int;
alter table t1 add id int first; #增長字段做爲第一個字段
alter table t1 add id int afer name; #在某字段後面增長新字段
刪除字段:
alter table t1 drop id;
字段的約束條件
約束條件直接用空格分開
not null #非空
default xx #默認值
primary key 或 primary key() #設置爲主鍵,建立複合主鍵:create table t1(id int,name varchar(10),primary key(id,name)) 增長:alter table t1 add primary key(c1,c2);
auto_increment #自增
unique 或 unique key() #惟一鍵
foreign key() references x() #外鍵
外鍵操做mysql
1:建立一個父表,主鍵做爲子表的外鍵: create table province( pId int primary key auto_increment, pName varchar(20) ); 2:建立子表,外鍵是父表的主鍵: create table user( userId int primary key auto_increment, userName varchar(40), pid int, foreign key(pid) references province(pId) ); 給一張表添加外鍵,即給子表的外鍵添加主鍵的規則: 在子表聲明一個字段pid int,用於做爲子表的外鍵,foreign key(子表的外鍵字段) references 父表的表名(父表的主鍵的字段名); 3:當建立好數據表時添加外鍵約束: alter table user add foreign key(pid) references province(pId); alter table 子表的數據表名 add foreign key(子表的外鍵名稱) references 父表的數據表名稱(父表的主鍵名稱);
外鍵注意:
1.1 sql建表時必須先創建被關聯表,插入數據必須先插入被關聯表的數據
1.2 外鍵改變時動做cascade set null restrict no action
1.3 多對多,須要先建立第三張表,第三表儲存前兩張表的關係對應,第三張表建立兩個外鍵指向前兩張表。
1.4 一對一,兩張表的關係爲第二張表是第一張表信息的補充,在第二張表中建立外鍵指向第一張表,而且設置unique。sql
創建索引數據庫
普通索引INDEX:加速查找 彙集索引:主鍵索引,葉子節點存放了全部字段的數據
輔助索引:普通索引和惟一索引,葉子節點只存放該字段的數據 惟一索引: -主鍵索引PRIMARY KEY:加速查找+約束(不爲空、不能重複) -惟一索引UNIQUE:加速查找+約束(不能重複) 聯合索引: -PRIMARY KEY(id,name):聯合主鍵索引 -UNIQUE(id,name):聯合惟一索引 -INDEX(id,name):聯合普通索引
舉個例子來講,好比你在爲某商場作一個會員卡的系統。 這個系統有一個會員表 有下列字段: 會員編號 INT 會員姓名 VARCHAR(10) 會員身份證號碼 VARCHAR(18) 會員電話 VARCHAR(10) 會員住址 VARCHAR(50) 會員備註信息 TEXT 那麼這個 會員編號,做爲主鍵,使用 PRIMARY 會員姓名 若是要建索引的話,那麼就是普通的 INDEX 會員身份證號碼 若是要建索引的話,那麼能夠選擇 UNIQUE (惟一的,不容許重複) #除此以外還有全文索引,即FULLTEXT 會員備註信息 , 若是須要建索引的話,能夠選擇全文搜索。 用於搜索很長一篇文章的時候,效果最好。 用在比較短的文本,若是就一兩行字的,普通的 INDEX 也能夠。 但其實對於全文搜索,咱們並不會使用MySQL自帶的該索引,而是會選擇第三方軟件如Sphinx,專門來作全文搜索。 #其餘的如空間索引SPATIAL,瞭解便可,幾乎不用
#方法一:建立表時 CREATE TABLE 表名 ( 字段名1 數據類型 [完整性約束條件…], 字段名2 數據類型 [完整性約束條件…], [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [索引名] (字段名[(長度)] [ASC |DESC]) ); #方法二:CREATE在已存在的表上建立索引 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(長度)] [ASC |DESC]) ; #方法三:ALTER TABLE在已存在的表上建立索引 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(長度)] [ASC |DESC]) ; #刪除索引:DROP INDEX 索引名 ON 表名字;
舉例:
#方式一 create table t1( id int, name char, age int, sex enum('male','female'), unique key uni_id(id), index ix_name(name) #index沒有key ); #方式二 create index ix_age on t1(age); #方式三 alter table t1 add index ix_sex(sex); #查看 mysql> show create table t1; | t1 | CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `name` char(1) DEFAULT NULL, `age` int(11) DEFAULT NULL, `sex` enum('male','female') DEFAULT NULL, UNIQUE KEY `uni_id` (`id`), KEY `ix_name` (`name`), KEY `ix_age` (`age`), KEY `ix_sex` (`sex`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
數據操做spa
插入數據:
1. 插入完整數據(順序插入) 語法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 語法二: INSERT INTO 表名 VALUES (值1,值2,值3…值n); 2. 指定字段插入數據 語法: INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…); 3. 插入多條記錄 語法: INSERT INTO 表名 VALUES (值1,值2,值3…值n), (值1,值2,值3…值n), (值1,值2,值3…值n); 4. 插入查詢結果 語法: INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …;
更新數據:rest
語法: UPDATE 表名 SET 字段1=值1, 字段2=值2, WHERE CONDITION; 示例: UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;
刪除數據:code
語法: DELETE FROM 表名 WHERE CONITION; 示例: DELETE FROM mysql.user WHERE password=’’; 注意:delete from table1 這條命令能夠刪除表中全部數據,但不會重置自增字段屬性的記錄。delete不是用來清空表的,而是用來刪除特定的數據,若是要清空表用truncate table1。