創(chuàng)建數(shù)據(jù)表
CREATE TABLE table_name (column_name column_type);
create table test(
`userid` int auto_increment,
`username` varchar(32) not null,
`userage` int not null,
primary key ('userid')
)
1 如果你不想字段為 NULL 可以設(shè)置字段的屬性為 NOT NULL怯伊, 在操作數(shù)據(jù)庫(kù)時(shí)如果輸入該字段的數(shù)據(jù)為NULL 筛婉,就會(huì)報(bào)錯(cuò)却邓。
2 AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵峦嗤,數(shù)值會(huì)自動(dòng)加1蕊唐。
3 PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來(lái)定義主鍵烁设,列間以逗號(hào)分隔替梨。
4 ENGINE 設(shè)置存儲(chǔ)引擎,CHARSET 設(shè)置編碼。
刪除數(shù)據(jù)表
DROP TABLE table_name ;
drop table test;
1 刪除表內(nèi)數(shù)據(jù),用 delete : delete from 表名 where 刪除條件;
2 清除表內(nèi)數(shù)據(jù)副瀑,保存表結(jié)構(gòu)弓熏,用 truncate: truncate table 表名;
3 刪除表用 drop,就是啥都沒(méi)了:DROP TABLE 表名;
4 delete 操作以后糠睡,使用 optimize table table_name ,會(huì)立刻釋放磁盤空間
插入數(shù)據(jù)
INSERT INTO table_name (xx)values (xx)
insert into test (username,userage) values ('test',100)
查詢數(shù)據(jù)
select column_name from 表名 [where clause] [limit n] [offset m]
select username from test where userid=1 limit 1 offset 1
基本查詢語(yǔ)句
SELECT * FROM websites; /* 查詢表所有數(shù)據(jù) */
SELECT NAME FROM websites; /* 查詢表字段數(shù)據(jù) */
SELECT * FROM websites where name = "廣西"; /* 查詢表字段下條件數(shù)據(jù) */
SELECT * from websites where name like "_o%"; /* 模糊查詢表下數(shù)據(jù) */
SELECT * FROM websites where id BETWEEN "1" AND "5"; /* 查詢表下字段范圍數(shù)據(jù) */
SELECT * FROM websites WHERE name in ("廣西","百度"); /* 查詢表字段下固定條件數(shù)據(jù) */
SELECT DISTINCT country FROM Websites; /* 查詢?nèi)ブ刂?*/
SELECT * FROM Websites WHERE country = "CN" AND alexa > 50; /*查詢表下范圍條件數(shù)據(jù)*/
SELECT * FROM Websites WHERE country = "USA" OR country="sh"; /* 查詢表下條件不同值 */
SELECT * FROM Websites ORDER BY alexa; /* 查詢表下值排序結(jié)果 */
SELECT * FROM Websites ORDER BY alexa DESC; /* 查詢表下排序結(jié)果降序 */
SELECT * FROM Websites LIMIT 2; /* 查詢表下范圍數(shù)據(jù) */
SELECT name as zzz from websites; /*別名查詢表下數(shù)據(jù)*/
分頁(yè)查詢案例
select * from _table limit (page_number-1)*lines_perpage, lines_perpage
或者
select * from _table limit lines_perpage offset (page_number-1)*lines_perpage
1 查詢語(yǔ)句中你可以使用一個(gè)或者多個(gè)表挽鞠,表之間使用逗號(hào)(,)分割,并使用WHERE語(yǔ)句來(lái)設(shè)定查詢條件狈孔。
2 SELECT 命令可以讀取一條或者多條記錄
3你可以使用星號(hào)(*)來(lái)代替其他字段滞谢,SELECT語(yǔ)句會(huì)返回表的所有字段數(shù)據(jù)
4 你可以使用 WHERE 語(yǔ)句來(lái)包含任何條件。
5 你可以通過(guò)OFFSET指定SELECT語(yǔ)句開(kāi)始查詢的數(shù)據(jù)偏移量除抛。默認(rèn)情況下偏移量為0。
6 你可以使用 AND 或者 OR 指定一個(gè)或多個(gè)條件母截。
修改數(shù)據(jù)
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
update test set username='xx' where userid=1;
1 你可以同時(shí)更新一個(gè)或多個(gè)字段到忽。
2 你可以在 WHERE 子句中指定任何條件。
3 你可以在一個(gè)單獨(dú)表中同時(shí)更新數(shù)據(jù)清寇。
刪除數(shù)據(jù)
DELETE FROM table_name [WHERE Clause]
delete from test where username='xx';
1 如果沒(méi)有指定 WHERE 子句喘漏,MySQL 表中的所有記錄將被刪除
2 你可以在 WHERE 子句中指定任何條件
3 您可以在單個(gè)表中一次性刪除記錄。
LIKE子句
select * from table_name where column_name like %xx;
匹配模式
'%a' //以a結(jié)尾的數(shù)據(jù)
'a%' //以a開(kāi)頭的數(shù)據(jù)
'%a%' //含有a的數(shù)據(jù)
'_a_' //三位且中間字母是a的
'_a' //兩位且結(jié)尾字母是a的
'a_' //兩位且開(kāi)頭字母是a的'%a'
1 你可以使用LIKE子句代替等號(hào) =华烟。
2 LIKE 通常與 % 一同使用翩迈,類似于一個(gè)元字符的搜索。
3 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句來(lái)指定條件盔夜。
union操作符
UNION 操作符用于連接兩個(gè)以上的 SELECT 語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中负饲。多個(gè) SELECT 語(yǔ)句會(huì)刪除重復(fù)的數(shù)據(jù)。
select XX UNION [ALL | DISTINCT] select XX
1 ALL所有喂链,包含重復(fù)數(shù)據(jù)返十。
2 DISTINCT刪除結(jié)果集中重復(fù)的數(shù)據(jù),默認(rèn)值椭微。
排序
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
select * from test order by userid ASC
你可以使用任何字段來(lái)作為排序的條件洞坑,從而返回排序后的查詢結(jié)果。
你可以設(shè)定多個(gè)字段來(lái)排序蝇率。
你可以使用 ASC 或 DESC 關(guān)鍵字來(lái)設(shè)置查詢結(jié)果是按升序或降序排列迟杂。 默認(rèn)情況下,它是按升序排列本慕。
你可以添加 WHERE...LIKE 子句來(lái)設(shè)置條件排拷。
連接使用
SELECT XX FROM TABLE_NAME JOIN TABLE_NAME ON 條件
create table user (`username` varchar(32),`time` DATETIME);
select a.username b.time from test a join user b on b.username=a.username;
INNER JOIN(內(nèi)連接,或等值連接):獲取兩個(gè)表中字段匹配關(guān)系的記錄。
LEFT JOIN(左連接):獲取左表所有記錄间狂,即使右表沒(méi)有對(duì)應(yīng)匹配的記錄攻泼。
RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒(méi)有對(duì)應(yīng)匹配的記錄忙菠。
正則匹配使用
SELECT name FROM person_tbl WHERE name REGEXP 正則表達(dá)式;
select username from test where username regexp '^xx'
事務(wù)
事務(wù)處理主要有兩種方法:
BEGIN 開(kāi)始一個(gè)事務(wù)
ROLLBACK 事務(wù)回滾
COMMIT 事務(wù)確認(rèn)
直接用 SET 來(lái)改變 MySQL 的自動(dòng)提交模式:
SET AUTOCOMMIT=0 禁止自動(dòng)提交
SET AUTOCOMMIT=1 開(kāi)啟自動(dòng)提交
begin;
insert into test(username,userage) values('zz',11);
commit;
insert into test(username,userage) values('zzzz',1111);
rollback;
在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫(kù)引擎的數(shù)據(jù)庫(kù)或表才支持事務(wù)何鸡。
事務(wù)處理可以用來(lái)維護(hù)數(shù)據(jù)庫(kù)的完整性,保證成批的 SQL 語(yǔ)句要么全部執(zhí)行牛欢,要么全部不執(zhí)行骡男。
事務(wù)用來(lái)管理 insert,update,delete 語(yǔ)句
ALTER命令
1 添加行
alter table test add country varchar(32);
show columns from test;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| userid | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(32) | NO | | NULL | |
| userage | int(11) | YES | | NULL | |
| time | datetime | YES | | NULL | |
| country | varchar(32) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 修改字段名和類型
alter table test change country countrys varchar(42);
show columns from test;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| userid | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(32) | NO | | NULL | |
| userage | int(11) | YES | | NULL | |
| time | datetime | YES | | NULL | |
| countrys | varchar(42) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
3 刪除行
alter table test drop country;
show columns from test;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| userid | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(32) | NO | | NULL | |
| userage | int(11) | YES | | NULL | |
| time | datetime | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
索引
1 添加索引和刪除索引。
alter table test add index id (username);
alter table test drop index id;
Join
mysql> select * from user_write;
+----+-----+---------------+---------------------+
| id | uid | write | ctime |
+----+-----+---------------+---------------------+
| 1 | 1 | 學(xué)習(xí)寫 | 2018-10-19 15:20:21 |
| 2 | 2 | 學(xué)習(xí)寫sql | 2018-10-19 15:30:21 |
| 3 | 1 | 學(xué)習(xí)寫Html | 2018-10-19 15:30:21 |
+----+-----+---------------+---------------------+
3 rows in set (0.00 sec)
mysql> select * from user_read;
+----+-----+---------------+---------------------+
| id | uid | read | ctime |
+----+-----+---------------+---------------------+
| 1 | 1 | 學(xué)習(xí) | 2018-10-19 14:49:21 |
| 2 | 2 | 學(xué)習(xí)寫sql | 2018-10-19 14:54:00 |
| 3 | 3 | 學(xué)習(xí)寫Html | 2018-10-19 15:12:46 |
+----+-----+---------------+---------------------+
3 rows in set (0.01 sec)
mysql> select * from user;
+----+----------+-----+-----+
| id | username | age | sex |
+----+----------+-----+-----+
| 1 | 西門0 | 24 | 1 |
| 2 | 西門1 | 24 | 1 |
| 3 | 西門2 | 24 | 1 |
| 4 | 西門3 | 33 | 2 |
+----+----------+-----+-----+
3 rows in set (0.01 sec)
1 怎么找到只read的人全部信息傍睹?
mysql> select * from user inner join user_read on user.id=user_read.uid;
+----+----------+-----+-----+----+-----+---------------+---------------------+
| id | username | age | sex | id | uid | read | ctime |
+----+----------+-----+-----+----+-----+---------------+---------------------+
| 1 | 西門0 | 24 | 1 | 1 | 1 | 學(xué)習(xí) | 2018-10-19 14:49:21 |
| 2 | 西門1 | 24 | 1 | 2 | 2 | 學(xué)習(xí)寫sql | 2018-10-19 14:54:00 |
| 3 | 西門2 | 24 | 1 | 3 | 3 | 學(xué)習(xí)寫Html | 2018-10-19 15:12:46 |
+----+----------+-----+-----+----+-----+---------------+---------------------+
3 rows in set (0.01 sec)
2 怎么找到只write的人全部信息隔盛?
mysql> select * from user inner join user_write on user.id=user_write.uid;
+----+----------+-----+-----+----+-----+---------------+---------------------+
| id | username | age | sex | id | uid | write | ctime |
+----+----------+-----+-----+----+-----+---------------+---------------------+
| 1 | 楊旭 | 24 | 1 | 1 | 1 | 學(xué)習(xí)寫 | 2018-10-19 15:20:21 |
| 1 | 楊旭 | 24 | 1 | 3 | 1 | 學(xué)習(xí)寫Html | 2018-10-19 15:30:21 |
| 2 | 西門1 | 24 | 1 | 2 | 2 | 學(xué)習(xí)寫sql | 2018-10-19 15:30:21 |
+----+----------+-----+-----+----+-----+---------------+---------------------+
3 rows in set (0.00 sec)
3 找到write和read的人?
mysql> select * from user inner join user_read on user.id=user_read.uid inner join user_write on user.id=user_write.uid;
+----+----------+-----+-----+----+-----+--------------+---------------------+----+-----+---------------+---------------------+
| id | username | age | sex | id | uid | read | ctime | id | uid | write | ctime |
+----+----------+-----+-----+----+-----+--------------+---------------------+----+-----+---------------+---------------------+
| 1 | 西門0 | 24 | 1 | 1 | 1 | 學(xué)習(xí) | 2018-10-19 14:49:21 | 1 | 1 | 學(xué)習(xí)寫 | 2018-10-19 15:20:21 |
| 2 | 西門1 | 24 | 1 | 2 | 2 | 學(xué)習(xí)寫sql | 2018-10-19 14:54:00 | 2 | 2 | 學(xué)習(xí)寫sql | 2018-10-19 15:30:21 |
| 1 | 西門0 | 24 | 1 | 1 | 1 | 學(xué)習(xí) | 2018-10-19 14:49:21 | 3 | 1 | 學(xué)習(xí)寫Html | 2018-10-19 15:30:21 |
+----+----------+-----+-----+----+-----+--------------+---------------------+----+-----+---------------+---------------------+
3 rows in set (0.01 sec)
4 找到不讀人拾稳?
mysql> select * from user left join user_read on user.id=user_read.uid where user_read.id is null;
+----+----------+-----+-----+------+------+------+-------+
| id | username | age | sex | id | uid | read | ctime |
+----+----------+-----+-----+------+------+------+-------+
| 4 | 西門3 | 33 | 2 | NULL | NULL | NULL | NULL |
+----+----------+-----+-----+------+------+------+-------+
1 row in set (0.00 sec)
5 找到不寫的人吮炕?
mysql> select * from user left join user_write on user.id=user_write.uid where user_write.id is null;
+----+----------+-----+-----+------+------+-------+-------+
| id | username | age | sex | id | uid | write | ctime |
+----+----------+-----+-----+------+------+-------+-------+
| 3 | 西門2 | 24 | 1 | NULL | NULL | NULL | NULL |
| 4 | 西門3 | 33 | 2 | NULL | NULL | NULL | NULL |
+----+----------+-----+-----+------+------+-------+-------+
2 rows in set (0.00 sec)
6 找到不讀不寫的人?
mysql> select * from user left join user_read on user.id=user_read.uid left join user_write on user.id=user_write.uid where user_read.id is null and user_write.id is null;
+----+----------+-----+-----+------+------+------+-------+------+------+-------+-------+
| id | username | age | sex | id | uid | read | ctime | id | uid | write | ctime |
+----+----------+-----+-----+------+------+------+-------+------+------+-------+-------+
| 4 | 西門3 | 33 | 2 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+----+----------+-----+-----+------+------+------+-------+------+------+-------+-------+
1 row in set (0.00 sec)