1.DDL:数据定义语言
DDL就是对数据库内部I的对象进行创建、删除、修改等操作的语言。
创建数据库:
CREATE DATABASE dbname;
参数:dbname:数据库名称。
选择要操作的数据库:
USE dbname;
参数:dbname:数据库名称。查看数据库所有的表:
show TABLES;
删除数据库:
DROP DATABASE dbname;
参数:dbname:数据库名称。
创建表:
CREATE TABLE table1(id SMALLINT PRIMARY KEY NOT NULL,name VARCHAR(20));
参数:table1:表名;id,name表中的列。查看表的定义的部分信息:
DESC table1;
参数:table1:表名。查看表的定义的全部信息:
SHOW CREATE TABLE table1;
参数:table1:表名。
删除表:
DROP TABLE table1;
参数:table1:表名。
修改表字段的类型:
ALTER TABLE table1 MODIFY name VARCHAR(30);
参数:table1:表名;name:表的列名。
增加表的字段:
ALTER TABLE table1 ADD gender VARCHAR(2);
参数:table1:表名;gender:表的列名。
删除表的字段:
ALTER TABLE table1 DROP gender;
参数:table1:表名;gender:表的列名。修改表字段的名称:
ALTER TABLE table1 CHANGE gender age INT;
参数:table1:表名;gender,age:表的列名。
修改表名:
ALTER TABLE table1 RENAME table2;
参数:table1,table2:表名。
2.DML:数据操纵的语言
DML是对数据库中表记录的操作,主要包括表记录的插入、更新、删除和查询。
对表中所有的列都插入数据的完整写法:
INSERT INTO table2(id,name,age) VALUES(1,'张三',12);
参数:id,name,age:列名;1,'张三',12:记录。
对表中指定列插入数据:
INSERT INTO table2(id,age) VALUE(2,11);
参数:id,age:列名。
对表中所有的列都插入数据:
INSERT INTO table2 VALUES(4,'李四',40);
参数:4,'李四',40:记录。
对表中全部列更新:
UPDATE table2 SET name='王五';
参数:table2:表名,name:列名。
对表中指定列更新:
UPDATE table2 SET name='赵六' WHERE age=11;
参数:age=11:条件。
对表中多个字段更新:
UPDATE table2 SET name='赵六',age=50;
删除指定字段对应的记录:
DELETE FROM table2 WHERE id=4;
删除多个表的指定的列对应的记录:
DELETE a,b FROM tab_memory a,table2 b WHERE a.username='zhangsan' and b.id=3;
参数:a,b:表tab_memory,table2的别名。查询不重复的记录:
SELECT DISTINCT name FROM table2;
条件查询:
SELECT * FROM table2 WHERE id=2;
参数:table2:表名;id=2:条件。
查询结果按条件进行排序:
SELECT * FROM table2 ORDER BY age DESC;
参数:DESC:降序排序;ASC:升序排序(默认)。
查询结果按条件升序排序,起始量为1处开始取,向下取3条记录:
SELECT * FROM table2 ORDER BY age LIMIT 1,3;
参数:1:起始量;3:取出的记录数。
使用聚合函数查询记录数:
SELECT COUNT(*) FROM table2;
使用分组的方式按条件查询:
SELECT name,id FROM table2 GROUP BY age HAVING id=4;
解释:以age为标准进行分组,取出分组后条件id=4的记录。
内连接查询两张表:
table2:
table3:
SELECT name,age,gender FROM table2,table3 WHERE table2.id=table3.uid;
左外连接查询两张表:
SELECT name,age,gender FROM table2 LEFT JOIN table3 on table2.id=table3.uid;
右外连接查询两张表:
SELECT name,age,gender FROM table3 RIGHT JOIN table2 on table3.uid=table2.id;
对表的子查询:
SELECT * FROM table2 WHERE id IN(SELECT uid FROM table3);
对表的子查询(有唯一子结果):
SELECT * FROM table2 WHERE id=(SELECT uid FROM table3);
记录联合:
SELECT name FROM table2 UNION ALL SELECT gender FROM table3;
记录联合再去重:
SELECT name FROM table2 UNION SELECT gender FROM table3;
3.常用函数
字符串拼接函数:
SELECT CONCAT('aaa','bbb','ccc') AS '拼接结果';
解释:将多个字符串进行拼接。
字符串替换函数:
SELECT INSERT('hangzhou2016you',13,3,'me');
解释:将字符串hangzhou2016you从第13个字符开始以后的3个字符替换成me
字符串比较函数:
SELECT STRCMP('a','b');
解释:比较两个字符串的ASCII值的大小。如果两个字符串相等那么返回0,如果第一个位置的字符串大于第二个位置的就返回1,否则返回-1。
求子串的函数:
SELECT SUBSTRING('beijing2008',8,4);
解释:返回从字符串beijing2008的第八个位置的字符起,往后截取4个字符长度的字符串。求当前日期的函数:
SELECT CURDATE();
解释:返回当前日期。
求当前时间的函数:
SELECT CURTIME();
解释:返回当前时间。
求当前日期时间函数:
SELECT NOW();
解释:返回当前日期时间。
条件函数1:
SELECT if(age<20,'年轻','衰老') AS '青春' FROM table2;
解释:从table2的表中查询年龄age,如果age<20,则存储年轻,否则存储衰老。
条件函数2:
SELECT CASE WHEN age<20 THEN '年轻' ELSE '衰老' END FROM table2;
解释:结果与条件函数1一样也是,用来做条件判断的。
求当前数据库名称:
SELECT DATABASE();
求当前数据库版本:
SELECT VERSION();
求登录的用户名:
SELECT USER();
求IP地址的数字表示:
SELECT INET_ATON('192.168.1.1');
解释:主要就是把字符串形式的IP地址转换为数字表示的网络字节序。
求数字代表的IP地址:
SELECT INET_NTOA(3232235777);
将字符串转换为MD5值:
SELECT MD5('123456');
结果:
e10adc3949ba59abbe56e057f20f883e