MYSQL基础常见常用语句200条
数据库
1 # 查看所有的数据库 2 3 SHOW DATABASES ; 4 5 # 创建一个数据库 6 7 CREATE DATABASE k; 8 9 # 删除一个数据库 10 11 DROP DATABASE k; 12 13 # 使用这个数据库 14 15 USE k;
表
1 2 # 查看所有的表 3 4 SHOW TABLES ; 5 6 # 创建一个表 7 8 CREATE TABLE n(id INT, name VARCHAR(10)); 9 10 CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name)); 11 12 CREATE TABLE m(id INT, name VARCHAR(10)); 13 14 # 直接将查询结果导入或复制到新创建的表 15 16 CREATE TABLE n SELECT * FROM m; 17 18 # 新创建的表与一个存在的表的数据结构类似 19 20 CREATE TABLE m LIKE n; 21 22 # 创建一个临时表 23 24 # 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。 25 26 CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10)); 27 28 # 直接将查询结果导入或复制到新创建的临时表 29 30 CREATE TEMPORARY TABLE tt SELECT * FROM n; 31 32 # 删除一个存在表 33 34 DROP TABLE IF EXISTS m; 35 36 # 更改存在表的名称 37 38 ALTER TABLE n RENAME m; 39 40 RENAME TABLE n TO m; 41 42 # 查看表的结构(以下五条语句效果相同) 43 44 DESC n; # 因为简单,所以建议使用 45 46 DESCRIBE n; 47 48 SHOW COLUMNS IN n; 49 50 SHOW COLUMNS FROM n; 51 52 EXPLAIN n; 53 54 # 查看表的创建语句 55 56 SHOW CREATE TABLE n;
表的结构
1 # 添加字段 2 3 ALTER TABLE n ADD age VARCHAR(2) ; 4 5 # 删除字段 6 7 ALTER TABLE n DROP age; 8 9 # 更改字段属性和属性 10 11 ALTER TABLE n CHANGE age a INT; 12 13 # 只更改字段属性 14 15 ALTER TABLE n MODIFY age VARCHAR(7) ;
表的数据
1 # 增加数据 2 3 INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22'); 4 5 INSERT INTO n SELECT * FROM n; # 把数据复制一遍重新插入 6 7 # 删除数据 8 9 DELETE FROM n WHERE id = 2; 10 11 # 更改数据 12 13 UPDATE n SET name = 'tom' WHERE id = 2; 14 15 # 数据查找 16 17 SELECT * FROM n WHERE name LIKE '%h%'; 18 19 # 数据排序(反序) 20 21 SELECT * FROM n ORDER BY name, id DESC ;
键
1 2 # 添加主键 3 4 ALTER TABLE n ADD PRIMARY KEY (id); 5 6 ALTER TABLE n ADD CONSTRAINT pk_n PRIMARY KEY (id); # 主键只有一个,所以定义键名似乎也没有什么用 7 8 # 删除主键 9 10 ALTER TABLE n DROP PRIMARY KEY ; 11 12 # 添加外键 13 14 ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自动生成键名m_ibfk_1 15 16 ALTER TABLE m ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id); # 使用定义的键名fk_id 17 18 # 删除外键 19 20 ALTER TABLE m DROP FOREIGN KEY `fk_id`; 21 22 # 修改外键 23 24 ALTER TABLE m DROP FOREIGN KEY `fk_id`, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 删除之后从新建 25 26 # 添加唯一键 27 28 ALTER TABLE n ADD UNIQUE (name); 29 30 ALTER TABLE n ADD UNIQUE u_name (name); 31 32 ALTER TABLE n ADD UNIQUE INDEX u_name (name); 33 34 ALTER TABLE n ADD CONSTRAINT u_name UNIQUE (name); 35 36 CREATE UNIQUE INDEX u_name ON n(name); 37 38 # 添加索引 39 40 ALTER TABLE n ADD INDEX (age); 41 42 ALTER TABLE n ADD INDEX i_age (age); 43 44 CREATE INDEX i_age ON n(age); 45 46 # 删除索引或唯一键 47 48 DROP INDEX u_name ON n; 49 50 DROP INDEX i_age ON n;
视图
1 # 创建视图 2 3 CREATE VIEW v AS SELECT id, name FROM n; 4 5 CREATE VIEW v(id, name) AS SELECT id, name FROM n; 6 7 # 查看视图(与表操作类似) 8 9 SELECT * FROM v; 10 11 DESC v; 12 13 # 查看创建视图语句 14 15 SHOW CREATE VIEW v; 16 17 # 更改视图 18 19 CREATE OR REPLACE VIEW v AS SELECT name, age FROM n; 20 21 ALTER VIEW v AS SELECT name FROM n ; 22 23 # 删除视图 24 25 DROP VIEW IF EXISTS v;
联接
# 内联接 SELECT * FROM m INNER JOIN n ON m.id = n.id; # 左外联接 SELECT * FROM m LEFT JOIN n ON m.id = n.id; # 右外联接 SELECT * FROM m RIGHT JOIN n ON m.id = n.id; # 交叉联接 SELECT * FROM m CROSS JOIN n; # 标准写法 SELECT * FROM m, n; # 类似全连接full join的联接用法 SELECT id,name FROM m UNION SELECT id,name FROM n;
函数
1 # 聚合函数 2 3 SELECT count(id) AS total FROM n; # 总数 4 5 SELECT sum(age) AS all_age FROM n; # 总和 6 7 SELECT avg(age) AS all_age FROM n; # 平均值 8 9 SELECT max(age) AS all_age FROM n; # 最大值 10 11 SELECT min(age) AS all_age FROM n; # 最小值 12 13 # 数学函数 14 15 SELECT abs(-5); # 绝对值 16 17 SELECT bin(15), oct(15), hex(15); # 二进制,八进制,十六进制 18 19 SELECT pi(); # 圆周率3.141593 20 21 SELECT ceil(5.5); # 大于x的最小整数值6 22 23 SELECT floor(5.5); # 小于x的最大整数值5 24 25 SELECT greatest(3,1,4,1,5,9,2,6); # 返回集合中最大的值9 26 27 SELECT least(3,1,4,1,5,9,2,6); # 返回集合中最小的值1 28 29 SELECT mod(5,3); # 余数2 30 31 SELECT rand(); # 返回0到1内的随机值,每次不一样 32 33 SELECT rand(5); # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。 34 35 SELECT round(1415.1415); # 四舍五入1415 36 37 SELECT round(1415.1415, 3); # 四舍五入三位数1415.142 38 39 SELECT round(1415.1415, -1); # 四舍五入整数位数1420 40 41 SELECT truncate(1415.1415, 3); # 截短为3位小数1415.141 42 43 SELECT truncate(1415.1415, -1); # 截短为-1位小数1410 44 45 SELECT sign(-5); # 符号的值负数-1 46 47 SELECT sign(5); # 符号的值正数1 48 49 SELECT sqrt(9); # 平方根3 50 51 SELECT sqrt(9); # 平方根3 52 53 # 字符串函数 54 55 SELECT concat('a', 'p', 'p', 'le'); # 连接字符串-apple 56 57 SELECT concat_ws(',', 'a', 'p', 'p', 'le'); # 连接用','分割字符串-a,p,p,le 58 59 SELECT insert('chinese', 3, 2, 'IN'); # 将字符串'chinese'从3位置开始的2个字符替换为'IN'-chINese 60 61 SELECT left('chinese', 4); # 返回字符串'chinese'左边的4个字符-chin 62 63 SELECT right('chinese', 3); # 返回字符串'chinese'右边的3个字符-ese 64 65 SELECT substring('chinese', 3); # 返回字符串'chinese'第三个字符之后的子字符串-inese 66 67 SELECT substring('chinese', -3); # 返回字符串'chinese'倒数第三个字符之后的子字符串-ese 68 69 SELECT substring('chinese', 3, 2); # 返回字符串'chinese'第三个字符之后的两个字符-in 70 71 SELECT trim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese' 72 73 SELECT ltrim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese ' 74 75 SELECT rtrim(' chinese '); # 切割字符串' chinese '两边的空字符-' chinese' 76 77 SELECT repeat('boy', 3); # 重复字符'boy'三次-'boyboyboy' 78 79 SELECT reverse('chinese'); # 反向排序-'esenihc' 80 81 SELECT length('chinese'); # 返回字符串的长度-7 82 83 SELECT upper('chINese'), lower('chINese'); # 大写小写 CHINESE chinese 84 85 SELECT ucase('chINese'), lcase('chINese'); # 大写小写 CHINESE chinese 86 87 SELECT position('i' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-3 88 89 SELECT position('e' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-5 90 91 SELECT strcmp('abc', 'abd'); # 比较字符串,第一个参数小于第二个返回负数- -1 92 93 SELECT strcmp('abc', 'abb'); # 比较字符串,第一个参数大于第二个返回正数- 1 94 95 # 时间函数 96 97 SELECT current_date, current_time, now(); # 2018-01-13 12:33:43 2018-01-13 12:33:43 98 99 SELECT hour(current_time), minute(current_time), second(current_time); # 12 31 34 100 101 SELECT year(current_date), month(current_date), week(current_date); # 2018 1 1 102 103 SELECT quarter(current_date); # 1 104 105 SELECT monthname(current_date), dayname(current_date); # January Saturday 106 107 SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date); # 7 13 13 108 109 # 控制流函数 110 111 SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f'); # t f 112 113 SELECT ifnull(NULL, 't'), ifnull(2, 't'); # t 2 114 115 SELECT isnull(1), isnull(1/0); # 0 1 是null返回1,不是null返回0 116 117 SELECT nullif('a', 'a'), nullif('a', 'b'); # null a 参数相同或成立返回null,不同或不成立则返回第一个参数 118 119 SELECT CASE 2 120 121 WHEN 1 THEN 'first' 122 123 WHEN 2 THEN 'second' 124 125 WHEN 3 THEN 'third' 126 127 ELSE 'other' 128 129 END ; # second 130 131 # 系统信息函数 132 133 SELECT database(); # 当前数据库名-test 134 135 SELECT connection_id(); # 当前用户id-306 136 137 SELECT user(); # 当前用户-root@localhost 138 139 SELECT version(); # 当前mysql版本 140 141 SELECT found_rows(); # 返回上次查询的检索行数
用户
# 增加用户 CREATE USER 'test'@'localhost' IDENTIFIED BY 'test'; INSERT INTO mysql.user(Host, User, Password) VALUES ('localhost', 'test', Password('test')); # 在用户表中插入用户信息,直接操作User表不推荐 # 删除用户 DROP USER 'test'@'localhost'; DELETE FROM mysql.user WHERE User='test' AND Host='localhost'; FLUSH PRIVILEGES ; # 更改用户密码 SET PASSWORD FOR 'test'@'localhost' = PASSWORD('test'); UPDATE mysql.user SET Password=Password('t') WHERE User='test' AND Host='localhost'; FLUSH PRIVILEGES ; # 用户授权 GRANT ALL PRIVILEGES ON *.* TO test@localhost IDENTIFIED BY 'test'; # 授予用'test'密码登陆成功的test@localhost用户操作所有数据库的所有表的所有的权限 FLUSH PRIVILEGES ; # 刷新系统权限表,使授予权限生效 # 撤销用户授权 REVOKE DELETE ON *.* FROM 'test'@'localhost'; # 取消该用户的删除权限
存储过程
# 创建存储过程 DELIMITER // # 无参数 CREATE PROCEDURE getDates() BEGIN SELECT * FROM test ; END // CREATE PROCEDURE getDates_2(IN id INT) # in参数 BEGIN SELECT * FROM test WHERE a = id; END // CREATE PROCEDURE getDates_3(OUT sum INT) # out参数 BEGIN SET sum = (SELECT count(*) FROM test); END // CREATE PROCEDURE getDates_4(INOUT i INT) # inout参数 BEGIN SET i = i + 1; END // DELIMITER ; # 删除存储过程 DROP PROCEDURE IF EXISTS getDates; # 修改存储过程的特性 ALTER PROCEDURE getDates MODIFIES SQL DATA ; # 修改存储过程语句(删除再重建)略 # 查看存储过程 SHOW PROCEDURE STATUS LIKE 'getDates'; # 状态 SHOW CREATE PROCEDURE getDates_3; # 语句 # 调用存储过程 CALL getDates(); CALL getDates_2(1); CALL getDates_3(@s); SELECT @s; SET @i = 1; CALL getDates_4(@i); SELECT @i; # @i = 2
其他语句
# 查看所有的表信息(包括视图) SHOW TABLE STATUS;
其他
# 数据库备份 mysqldump -u root -p db_name > file.sql mysqldump -u root -p db_name table_name > file.sql # 数据库还原 mysql -u root -p < C:\file.sql
数据库练习网站:http://sqlzoo.net/wiki/SQL_Tutorial
转载自:http://blog.csdn.net/csdn_0_001/article/details/79051481

浙公网安备 33010602011771号