基本操作:
1. 单表约束
- # 主键约束: PRIMARY KEY 要求被装饰的字段: 唯一和非空
- # 唯一约束: UNIQUE 要求被装饰的字段: 唯一,
- # . 联合唯一: 在结尾: unique(字段 1, 字段 2)
- # 非空约束: NOT NULL 要求被装饰的字段: 非空
- # 外键约束: FOREIGN KEY 某主表的外键
- # 自动增加: AUTO_INCREMENT 自动增加 (需要和主键 PRIMARY KEY 同时用)
- # 设置默认值: DEFAULT 为该属性设置默认值
- # 在 int,char 中: zerofill 不足位数默认填充 0
- #
- #
2. 常用数据类型
- int #整型, 4 个字节 一般不需要指定宽度,(8): 只是显示为 8 位, 默认有负号设置无负号: unsigned
- double #浮点型, 例如 double(5,2), 标识最多 5 位, 其中 2 位为小数, 即最大为 999.99
- varchar #可变长度字符串类型. 例如: varchar(10) 'aaa' 占 3 位
- char #固定长度字符串类型. 例如: char(10) 'aaa' 占 10 位
- text #大文本字符串类型.
- blob #字节类型. 例如:
- datetime #日期时间类型. 例如: datetime(yyyy-MM-dd hh:mm:ss)
- date #日期类型. 例如: date(yyyy:MM:dd)
- time #时间类型. 例如: time(hh:mm:ss)
- timestamp #时间戳类型. 例如: timestamp(yyyy-MM-dd hh:mm:ss) 会自动赋值
- enum #枚举 多选一 enum('male','female'),default 为默认值
例如: sex enum('male','female') not null default 'male'
set #集合 多选多, 可以选一个 set('read','DJ','DBJ','run')
注: 字符串类型和时间类型都要用单引号括起来, 空值为 null
3. 查看数据列表
show databases; -- 查看所有数据库
show create table 表名; -- 查看表的创建细节
desc 表名; -- 查看表结构
4. 进入数据库
- #use 数据名
- use Python_7
5. 创建数据库
- #CREATE DATABASE 数据库名
- CREATE DATABASE Python_7;
- CREATE DATABASE pyrhon_7 charset utf8
- # 修改数据库编码
- alter database db1 charset gbk;
6. 删除数据库
- #drop database 需要删除的数据库名
- drop database Python_7;
7. 查看表
select database(); # 查看当前所在的库
show tables; -- 查看数据库中所有表
desc 表名; -- 查看表结构
show create table 表名; -- 查看表的创建细节
8. 创建表
- # 创建新表
- # create table 新建数据表名 (
- # 字段名 类型 (长度) [约束 (具体见 1)],
- # 字段名 类型 (长度) [约束 (具体见 1)]
- # );
- create table class(
- id INT AUTO_INCREMENT,
- name varchar(32) UNIQUE,
- age varchar(32) NOT NULL
- );
- # 需要注意
- # 根据已有的表创建新表
create table 新表 like 旧表 -- 使用旧表创建新表
create table 新表 as select 字段 1 字段 2... from definition only -- 使用自定义值去新建表
9. 删除表
- #drop table 数据库表名
- drop table Python
10. 修改表
alter table 表名 add 字段名 类型 (长度) [约束]; -- 添加列
alter table 表名 modify 字段名 类型 (长度) [约束]; -- 修改列的类型长度及约束
alter table 表名 change 旧字段名 新字段名 类型 (长度) [约束]; -- 修改列表名
alter table 表名 drop 字段名; -- 删除列
alter table 表名 character set 字符集; -- 修改表的字符集
rename table 表名 to 新表名; -- 修改表名
11. 增加数据
insert into 表 (字段名 1, 字段名 2..) values(值 1, 值 2..);-- 向表中插入某些列
insert into 表 values(值 1, 值 2, 值 3..); -- 向表中插入所有列
12. 修改数据
update 表名 set 字段名 = 值, 字段名 = 值...; -- 这个会修改所有的数据, 把一列的值都变了
update 表名 set 字段名 = 值, 字段名 = 值... where 条件; -- 只改符合 where 条件的行
13. 删除数据
delete from 表名 -- 删除表中所有记录
delete from 表名 where 条件 -- 删除符合 where 条件的数据
truncate table 表名; -- 把表直接 drop 掉, 重新建表, auto_increment 将置为零. 删除的数据不能找回. 执行速度比 delete 快
14. 数据的简单查询
select * from 表名; -- 查询所有列
select 字段名 1, 字段名 2, 字段名 3.. from 表名; -- 查询指定列
15. 几个简单的基本的 sql 语句
select * from 表名 where 范围 -- 选择查询
insert into 表名 (field1,field2) values(value1,value2) -- 插入
delete from 表名 where 范围 -- 删除
update 表名 set field1=value1 where 范围 -- 更新
select * from 表名 where field1 like '%value1%' -- 查找
select * from 表名 order by field1,field2 [desc] -- 排序:
select count as 需要统计总数的字段名 from 表名 -- 总数
select sum(field1) as sumvalue from 表名 -- 求和
select avg(field1) as avgvalue from 表名 -- 平均
select max(field1) as maxvalue from 表名 -- 最大
select min(field1) as minvalue from 表名 -- 最小
16. 存储引擎
- # 查看所有的存储引擎
- show engines;
- # 查看不同存储引擎存储表结构文件特点
create table t1(id int)engine=innodb; -- MySQL 默认的存储引擎, 支持事务, 支持行锁, 支持外键. 有且只有一个主键, 用来组织数据的依据
create table t2(id int)engine=myisam; -- 不支持事务, 不支持外键, 支持全文索引, 处理速度快.
create table t3(id int)engine=blackhole; -- 黑洞, 写入它的任何内容都会消失
create table t4(id int)engine=memory;-- 将表中的数据存储在内存中. 表结构以文件存储于磁盘.
- insert into t1 values(1);
- insert into t2 values(1);
- insert into t3 values(1);
- insert into t4 values(1);
17. 设置严格模式
- # 查询
- show variables like '%mode%';
- # 设置
set session -- 设置当前窗口下有效
set global -- 全局有效, 终身受用
- set global sql_mode = "STRICT_TRANS_TABLES";
- # 设置完成后需要退出客户端, 重新登录客户端即可, 不需要重启服务端
group by 分组涉及到的模式:
设置 sql_mode 为 only_full_group_by, 意味着以后但凡分组, 只能取到分组的依据,
不应该在去取组里面的单个元素的值, 那样的话分组就没有意义了, 因为不分组就是对单个元素信息的随意获取
- """set global sql_mode="strict_trans_tables,only_full_group_by";
- # 重新链接客户端
18.like 的用法
A:% 包含零个或多个字符的任意字符串:
1,like'Mc%' 将搜索以字母 Mc 开头的所有字符串 (如 McBadden).
2,like'%inger' 将搜索以字母 inger 结尾的所有字符串 (如 Ringer,Stringer).
3,like'%en%' 将搜索在任何位置包含字母 en 的所有字符串 (如 Bennet,Green,McBadden).
B:_(下划线) 任何单个字符:
like'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称 (如 Cheryl,Sheryl).
C:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:
1,like'[CK]ars[eo]n' 将搜索下列字符串: Carsen,Karsen,Carson 和 Karson(如 Carson).
2,like'[M-Z]inger' 将搜索以字符串 inger 结尾, 以从 M 到 Z 的任何单个字母开头的所有名称 (如 Ringer).
D:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:
like'M[^c]%' 将搜索以字母 M 开头, 并且第二个字母不是 c 的所有名称 (如 MacFeather).
E:* 它同于 DOS 命令中的通配符, 代表多个字符:
c*c 代表 cc,cBc,cbc,cabdfec 等多个字符.
F:? 同于 DOS 命令中的? 通配符, 代表单个字符 :
b?b 代表 brb,bFb 等
G:# 大致同上, 不同的是代只能代表单个数字. k#k 代表 k1k,k8k,k0k .
下面我们来举例说明一下:
例 1, 查询 name 字段中包含有 "明" 字的.
select * from table1 where name like '% 明 %'
例 2, 查询 name 字段中以 "李" 字开头.
select * from table1 where name like '李 *'
例 3, 查询 name 字段中含有数字的.
select * from table1 where name like '%[0-9]%'
例 4, 查询 name 字段中含有小写字母的.
select * from table1 where name like '%[a-z]%'
例 5, 查询 name 字段中不含有数字的.
select * from table1 where name like '%[!0-9]%'
以上例子能列出什么值来显而易见. 但在这里, 我们着重要说明的是通配符 "*" 与 "%" 的区别.
很多朋友会问, 为什么我在以上查询时有个别的表示所有字符的时候用 "%" 而不用 "*"? 先看看下面的例子能分别出现什么结果:
- select * from table1 where name like '* 明 *'
- select * from table1 where name like '% 明 %'
大家会看到, 前一条语句列出来的是所有的记录, 而后一条记录列出来的是 name 字段中含有 "明" 的记录, 所以说, 当我们作字符型字段包含一个子串的查询时最好采用 "%" 而不用 "*", 用 "*" 的时候只在开头或者只在结尾时, 而不能两端全由 "*" 代替任意字符的情况下.
来源: http://www.bubuko.com/infodetail-3156883.html