1. 操作数据库: CRUD
1. C(Create): 创建
* 创建数据库:
* create database 数据库名称;
* 创建数据库, 判断不存在, 再创建:
* create database if not exists 数据库名称;
* 创建数据库, 并指定字符集
* create database 数据库名称 character set 字符集名;
* 练习: 创建 db4 数据库, 判断是否存在, 并制定字符集为 gbk
* create database if not exists db4 character set gbk;
2. R(Retrieve): 查询
* 查询所有数据库的名称:
* show databases;
* 查询某个数据库的字符集: 查询某个数据库的创建语句
* show create database 数据库名称;
3. U(Update): 修改
* 修改数据库的字符集
* alter database 数据库名称 character set 字符集名称;
4. D(Delete): 删除
* 删除数据库
* drop database 数据库名称;
* 判断数据库存在, 存在再删除
* drop database if exists 数据库名称;
5. 使用数据库
* 查询当前正在使用的数据库名称
* select database();
* 使用数据库
* use 数据库名称;
2. 操作表
1. C(Create): 创建
1. 语法:
create table 表名(
列名 1 数据类型 1,
列名 2 数据类型 2,
....
列名 n 数据类型 n
);
* 注意: 最后一列, 不需要加逗号(,)
* 数据库类型:
1. int: 整数类型
* age int,
2. double: 小数类型
* score double(5,2)
3. date: 日期, 只包含年月日, yyyy-MM-dd
4. datetime: 日期, 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp: 时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
* 如果将来不给这个字段赋值, 或赋值为 null, 则默认使用当前的系统时间, 来自动赋值
6. varchar: 字符串
* name varchar(20): 姓名最大 20 个字符
* zhangsan 8 个字符 张三 2 个字符
* 创建表
- create table student(
- id int,
- name varchar(32),
- age int ,
- score double(4,1),
- birthday date,
- insert_time timestamp
- );
* 复制表:
* create table 表名 like 被复制的表名;
2. R(Retrieve): 查询
* 查询某个数据库中所有的表名称
* show tables;
* 查询表结构
* desc 表名;
3. U(Update): 修改
1. 修改表名
alter table 表名 rename to 新的表名;
2. 修改表的字符集
alter table 表名 character set 字符集名称;
3. 添加一列
alter table 表名 add 列名 数据类型;
4. 修改列名称 类型
alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
5. 删除列
alter table 表名 drop 列名;
4. D(Delete): 删除
* drop table 表名;
* drop table if exists 表名 ;
3. 增删改表中数据
1. 添加数据:
* 语法:
* insert into 表名(列名 1, 列名 2,... 列名 n) values(值 1, 值 2,... 值 n);
* 注意:
1. 列名和值要一一对应.
2. 如果表名后, 不定义列名, 则默认给所有列添加值
insert into 表名 values(值 1, 值 2,... 值 n);
3. 除了数字类型, 其他类型需要使用引号 (单双都可以) 引起来
2. 删除数据:
* 语法:
* delete from 表名 [where 条件]
* 注意:
1. 如果不加条件, 则删除表中所有记录.
2. 如果要删除所有记录
1. delete from 表名; -- 不推荐使用. 有多少条记录就会执行多少次删除操作
2. TRUNCATE TABLE 表名; -- 推荐使用, 效率更高 先删除表, 然后再创建一张一样的表.
3. 修改数据:
* 语法:
* update 表名 set 列名 1 = 值 1, 列名 2 = 值 2,... [where 条件];
* 注意:
1. 如果不加任何条件, 则会将表中所有记录全部修改.
4. 查询表中的记录
* select * from 表名;
1. 语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2. 基础查询
1. 多个字段的查询
select 字段名 1, 字段名 2... from 表名;
* 注意:
* 如果查询所有字段, 则可以使用 * 来替代字段列表.
2. 去除重复:
* distinct
3. 计算列
* 一般可以使用四则运算计算一些列的值.(一般只会进行数值型的计算)
* ifnull(表达式 1, 表达式 2):null 参与的运算, 计算结果都为 null
* 表达式 1: 哪个字段需要判断是否为 null
* 如果该字段为 null 后的替换值.
4. 起别名:
* as:as 也可以省略
3. 条件查询
1. where 子句后跟条件
2. 运算符
- *> ,<,<= ,>= ,= ,<>
- * BETWEEN...AND
- * IN( 集合)
* LIKE: 模糊查询
* 占位符:
* _: 单个任意字符
* %: 多个任意字符
* IS NULL
* and 或 &&
* or 或 ||
* not 或 !
例子:
-- 查询年龄大于 20 岁
- SELECT * FROM student WHERE age> 20;
- SELECT * FROM student WHERE age>= 20;
-- 查询年龄等于 20 岁
SELECT * FROM student WHERE age = 20;
-- 查询年龄不等于 20 岁
- SELECT * FROM student WHERE age != 20;
- SELECT * FROM student WHERE age <> 20;
-- 查询年龄大于等于 20 小于等于 30
- SELECT * FROM student WHERE age>= 20 && age <=30;
- SELECT * FROM student WHERE age>= 20 AND age <=30;
- SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查询年龄 22 岁, 18 岁, 25 岁的信息
- SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
- SELECT * FROM student WHERE age IN (22,18,25);
-- 查询英语成绩为 null
SELECT * FROM student WHERE english = NULL; -- 不对的. null 值不能使用 = (!=) 判断
SELECT * FROM student WHERE english IS NULL;
-- 查询英语成绩不为 null
SELECT * FROM student WHERE english IS NOT NULL;
-- 查询姓马的有哪些? like
SELECT * FROM student WHERE NAME LIKE '马 %';
-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化 %";
-- 查询姓名是 3 个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '% 德 %';
来源: http://www.bubuko.com/infodetail-3091037.html