- 查看当前登陆用户:
select user();
- 登录数据库
mysql -u用户名 -p密码 -h 连接地址
- 修改当前用用户密码
set password = password('123456');
库操作
- 创建库
相当于创建了一个文件夹
create database python;
- 查看库
show databases;
使用库
切换到对应的文件夹
use python
表操作
- 创建表
create table tablename(字段名 类型(长度),字段名 类型(长度) 约束...)# 例子create table score(id int(8),name char(20),num int(4));
- 修改表
使用
语法:1. 修改表名ALTER TABLE 表名RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名 数据类型 [完整性约束条件…],ADD 字段名 数据类型 [完整性约束条件…];3. 删除字段ALTER TABLE 表名DROP 字段名;4. 修改字段ALTER TABLE 表名MODIFY 字段名 数据类型 [完整性约束条件…];ALTER TABLE 表名CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];ALTER TABLE 表名CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];5.修改字段排列顺序/在增加的时候指定字段位置ALTER TABLE 表名ADD 字段名 数据类型 [完整性约束条件…] FIRST;ALTER TABLE 表名ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;ALTER TABLE 表名CHANGE 字段名 旧字段名 新字段名 新数据类型 [完整性约束条件…] FIRST;ALTER TABLE 表名MODIFY 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
alter操作非空和唯一
create table t(id int unique,name char(10) not null);#去掉null约束alter table t modify name char(10) null;# 添加null约束alter table t modify name char(10) not null;# 去掉unique约束alter table t drop index id;# 添加unique约束alter table t modify id int unique;alter处理null和unique约束
alter操作主键
1、首先创建一个数据表table_test:create table table_test(`id` varchar(100) NOT NULL,`name` varchar(100) NOT NULL,PRIMARY KEY (`name`));2、如果发现主键设置错了,应该是id是主键,但如今表里已经有好多数据了,不能删除表再重建了,仅仅能在这基础上改动表结构。先删除主键alter table table_test drop primary key;然后再增加主键alter table table_test add primary key(id);注:在增加主键之前,必须先把反复的id删除掉。
为表添加外键
创建press表CREATE TABLE `press` (`id` int(11) NOT NULL,`name` char(10) DEFAULT NULL,PRIMARY KEY (`id`)) ;创建book表CREATE TABLE `book` (`id` int(11) DEFAULT NULL,`bk_name` char(12) DEFAULT NULL,`press_id` int(11) NOT NULL,KEY `press_id` (`press_id`)) ;为book表添加外键alter table book add constraint fk_id foreign key(press_id) references press(id);删除外键alter table book drop foreign key fk_id;
alter示例
mysql> desc staff_info;+-------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | varchar(50) | YES | | NULL | || age | int(3) | YES | | NULL | || sex | enum('male','female') | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.00 sec)# 表重命名mysql> alter table staff_info rename staff;Query OK, 0 rows affected (0.00 sec)mysql> desc staff;+-------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | varchar(50) | YES | | NULL | || age | int(3) | YES | | NULL | || sex | enum('male','female') | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.00 sec)# 删除sex列mysql> alter table staff drop sex;Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | varchar(50) | YES | | NULL | || age | int(3) | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+5 rows in set (0.01 sec)# 添加列mysql> alter table staff add sex enum('male','female');Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0# 修改id的宽度mysql> alter table staff modify id int(4);Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id | int(4) | YES | | NULL | || name | varchar(50) | YES | | NULL | || age | int(3) | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | || sex | enum('male','female') | YES | | NULL | |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.01 sec)# 修改name列的字段名mysql> alter table staff change name sname varchar(20);Query OK, 4 rows affected (0.03 sec)Records: 4 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id | int(4) | YES | | NULL | || sname | varchar(20) | YES | | NULL | || age | int(3) | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | || sex | enum('male','female') | YES | | NULL | |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.00 sec)# 修改sex列的位置mysql> alter table staff modify sex enum('male','female') after sname;Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id | int(4) | YES | | NULL | || sname | varchar(20) | YES | | NULL | || sex | enum('male','female') | YES | | NULL | || age | int(3) | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.00 sec)# 创建自增id主键mysql> alter table staff modify id int(4) primary key auto_increment;Query OK, 4 rows affected (0.02 sec)Records: 4 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-----------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+----------------+| id | int(4) | NO | PRI | NULL | auto_increment || sname | varchar(20) | YES | | NULL | || sex | enum('male','female') | YES | | NULL | || age | int(3) | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-----------------------+------+-----+---------+----------------+6 rows in set (0.00 sec)# 删除主键,可以看到删除一个自增主键会报错mysql> alter table staff drop primary key;ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key# 需要先去掉主键的自增约束,然后再删除主键约束mysql> alter table staff modify id int(11);Query OK, 4 rows affected (0.02 sec)Records: 4 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id | int(11) | NO | PRI | 0 | || sname | varchar(20) | YES | | NULL | || sex | enum('male','female') | YES | | NULL | || age | int(3) | YES | | NULL | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.01 sec)mysql> alter table staff drop primary key;Query OK, 4 rows affected (0.06 sec)Records: 4 Duplicates: 0 Warnings: 0# 添加联合主键mysql> alter table staff add primary key (sname,age);Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0# 删除主键mysql> alter table staff drop primary key;Query OK, 4 rows affected (0.02 sec)Records: 4 Duplicates: 0 Warnings: 0# 创建主键idmysql> alter table staff add primary key (id);Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-----------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+-------+| id | int(11) | NO | PRI | 0 | || sname | varchar(20) | NO | | | || sex | enum('male','female') | YES | | NULL | || age | int(3) | NO | | 0 | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-----------------------+------+-----+---------+-------+6 rows in set (0.00 sec)# 为主键添加自增属性mysql> alter table staff modify id int(4) auto_increment;Query OK, 4 rows affected (0.02 sec)Records: 4 Duplicates: 0 Warnings: 0mysql> desc staff;+-------+-----------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+-----------------------+------+-----+---------+----------------+| id | int(4) | NO | PRI | NULL | auto_increment || sname | varchar(20) | NO | | | || sex | enum('male','female') | YES | | NULL | || age | int(3) | NO | | 0 | || phone | bigint(11) | YES | | NULL | || job | varchar(11) | YES | | NULL | |+-------+-----------------------+------+-----+---------+----------------+6 rows in set (0.00 sec)
- 查看表
show tables;
- 查看表结构
# 查看一些简单的信息,更直观desc score;# 详细,可以查看到表名编码,存储引擎等..show create table score;
- 删除表
drop table score;
查看数据库的字符集设置
show variables like '%character%';
临时设置字符集(数据库重启既失效)
永久设置需要修改mysql配置文件
# 命令临时修改set character_set_server='utf8';
数据的增删改查
增
# 插入一条数据insert into 表名(字段名) values(值)insert into score(id,name,num) values(1,'alex',0);# 插入多条数据insert into score(id,name,num) values(1,'alex',0),(2,'mhy',0);
删
delete from 表名 where 条件# 删除这张表里ID等于2的数据delete from score where id = 2;
改
update 表 set 字段名='新的值' where 条件update score set id = 4 where name = 'mhy';
查
# 查询表里所有的数据select * from score;
约束 和 类型
类型
数字类型:
整型(): 长度的约束是无效的,它能够表示的大小只和它存储的字节数相关
| 类型 | 大小 | 范围 | 用途 |
|---|---|---|---|
| tinyint | 1bytes | 2**8 | 小整数值(年龄) |
| smallint | 2bytes | 2**16 | 大整数值 |
| miedium | 3bytes | 2**24 | 大整数值 |
| int | 4bytes | 2**32 | 大整数值(整数) |
| bigint | 8bytes | 2**64 | 极大整数值 |
示例:
# age3 tinyint unsigned 无符号(-)create table t1(age1 tinyint(2),age2 tinyint,age3 tinyint unsigned);
浮点型():薪资
float(m,n) 单精度:
- m 表示一共多少位
- n 表示小数部分占其中的多少
示例
create table t2(money float(6,2));insert into t2 values(2222222.33323232);
- double 双精度:能够表示的小数点之后的位数更精准(和float使用方法一样)
示例:
create table t4(money double);insert into t4 values(333.339324234323232);
字符串类型:
char(255):
- 浪费空间
- 操作节省时间
例如:用户名\密码\手机号\身份证号
char是定长存储 在存储过程中会将剩余的字节数用空格来替补
char(20) 存储后就是 ‘mhy ‘会将剩余没有使用的使用空格来填补
varchar(65535)
- 存储节省空间
- 更加浪费时间(慢)
例如:评论\微博\微信朋友圈\论坛
varchar变长存储
‘mhy’ 存储过后就是 ‘mhy3’
示例
create table t5(username char(20),password char(32));
时间类型:
datetime
年月日时分秒
例如:登陆时间\修改时间\出生日期
date
年月日
例如:注册时间
time
时分秒
例如:跑步计时
timestamp
时间戳
时间戳4字节:1970-2038-xx-xx
year
年
示例:
# 创建create table t6(dt datetime,d date,t time,ts timestamp,y year);# 查看当前时间select now();# 插入当前时间insert into t6(dt) values(now());insert into t6(y) values(now());insert into t6(t) values(now());# 插入自定义时间insert into t6(d) values(20190915);insert into t6(t) values(230909);# 字符串形式insert into t6(t) values('23:09:09');insert into t6(d) values('2019/09/15');# 更新后timestamp会随着最后的时间进行修改update t6 set dt='2019-09-14 23:12:12' where d = '2019/09/15';# 更新create table t6(dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, d date, t time, ts timestamp, y year);
单选和多选 性别 爱好
enum 单选
set 多选 并去重
示例:
create table t8(gender enum('男','女'),hobby set('抽烟','喝酒','烫头','洗脚'));insert into t8 values('男','抽烟');insert into t8 values('男','抽烟,烫头,洗脚');
Innodb引擎
mysql 5.6以上版本默认的存储引擎就是innodb引擎。
frm:格式的文件,存储表结构
ibd:存储数据
查看当前数据库的存储引擎
show variables like "default_storage_engine";
查看数据库的支持的存储引擎:
show engines;
Innodb引擎:支持事务,行级锁定,外键
事务:
原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
行级锁定:
当一个用户请求发生了事务,提交成功后,会对某一个用户加锁(行级锁),进行修改,同一时间,其他的人申请修改这个行的数据不能修改,但是其他行的数据不影响。这就是行级锁,但是如果同一时间修改的行过多,行级锁其实效率不高,innodb也支持表锁
外键:
表的外键是另一张表的主键。将两张表联系到一起。
作用:简单的说是为了保证数据的完整性。
严格模式设置:
#临时修改set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";# 配置文件修改sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
