[关闭]
@chengweihuang 2018-11-05T00:47:05.000000Z 字数 3232 阅读 552

mysql

mysql


mysql 配置文件地址
/etc/mysql/mysql.conf.d/mysqld.cnf

mysql 启动连接
sudo /etc/init.d/mysql start |stop | restart | reload

mysql -hIP地址 -u用户名 -p 密码
库管理
1 show databases;
2create databale if not exists 库名 character set
3select databases();
4use 库名
5show tables;
6 drop database 库名;
表管理
1creste table [if not exists] 表名 (字段名 数据类型)
2show create table
3 desc 表名
4 drop table 表1 ,表2

表记录的管理
1 insert into 表名 (字段名 , , , ) values(值1,值2)(值1,值2)
2select 字段1 ,字段2, ,, from 表名 [where 条件];

更改默认字符集
1 sudo -i
2 cd /etc/mysql/mysql.conf.d/
3 cp mysql.conf mysql2.conf
在 [mysql] 下面加
character_set_serer = utf-8

5 数据类型
1 数据类型
1 整形
int (4字节)
tinyint(1字节)
2 浮点型
float(m,n) 最多6个有效位
decimal(m,n) 整数部分和小数部分分开储存
字符类型
1 char :浪费存储时间 ,性能高
2varchar : 节约存储空间,性能低
3text /longtext/blob/longlob
4字符类型宽度和数值类型宽度区别
数值类型宽度为显示宽度 ,仅用于select 查询显示 和储存无关

枚举类型
enum()
set()

日期类型
1 data : YYYY-MM-DD HH:MM:SS
2 datatime :YYYY:MM:DD HH:MM:SS 不给值 默认返回 NULL
3timestamp : YYYY-MM-DD HH:MM:SS 不给值 默认返回当前时间
4time : HH-MM-SS

示例
1 创建一张表
create table t2(
id int,
username varchar(20),
password varchar(20),
money int ,
birthday date,
cztime timestamp
)character set utf8;
插入记录
insert into t2 values
(1,'用户1','123456',500,'1995-05-20','2018-08-30 09:01:01')

insert into t2 values  (2,'用户2','123456',600,'1992-02-20',now());

2 日期时间函数
1 now()返回服务器当前时间
2 curdata() 当前日期

3 data('1999-09-09 09:09:09') 从年月日时分秒中 提取出年月日
4 time(' ') 提取时分秒
5 year()提取年
6 month() 提取月

日期时间运算
1语法格式
select * from 表名
where 字段名 运算符 (now()-interval1 时间间隔单位)

时间间隔单位
2day |3 hour | 1 minute | 3 month

一天内的记录
mysql> select * from t2 where cztime>=(now()-interval 1 day);
三天以内 一天外
elect * from t2 where cztime<=(now()-interval 1 day) and cztime >= (now()-interval 3 day);

4 表字段的操作
1语法 alter table 表名 ....
添加字段
alter table 表名 add 字段名 数据类型
alter table 表名 add 字段名 数据类型 first
alter table 表名 add 字段名 数据类型 after 字段名

删除字段
alter table t3 drop sex
修改字段数据类型(modify)
alter table 表名 modify 字段名

修改字段
alter table 表名 modify 字段名 新数据类型
会受到表中已有数据的限制

删除表记录
delete from 表名 where 条件

一定要加条件

更改字段值

update 表名 set 字段1=值1 ,字段2=值2 where 条件

数值比较 = != < <= > >=
字符比较 = ! =
逻辑比较
and or

删除主键
1先删除自增长属性
alter table 表名 modify id int;
2删除主键
alter table 表名 drop primary key;

表的复制
create table 表名 select * from 表名 where 条件

复制表结构
create table 表名 select ... from where False

mysql 事物
事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务

在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

   2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

   3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

   4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

BEGIN 开始一个事务

ROLLBACK 事务回滚

COMMIT 事务确认 提交 提交后数据生效,永久保存

使用事物例子

begin; # 开始事务
insert into tests value(1); # 插入数据
insert into tests value(2); # 再插入一条
commit; # 提交事务 数据生效

begin; # 开始事务
insert into tests value(3); # 插入数据
insert into tests value(4); # 再插入一条
rollback; # 回滚

MyISAM与Innodb引擎的特点和区别

MyISAM:
特性:

  • 不支持事务:MyISAM存储引擎不支持事务,所以对事务有要求的业务场景不能使用 不支持外键
  • 表级锁定:其锁定机制是表级索引,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能
  • 读写互相阻塞 不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读
  • 存储空间 :可被压缩,存储空间小

InnoDB
特性:

  • 具有较好的事务支持 支持外键
  • 行级锁定
  • 读写阻塞与事务隔离级别相关
  • 具有非常高效的缓存特性:能缓存索引,也能缓存数据

外键

创建表的时候增加外键:在所有的表字段之后,使用foreign key'外键字段' references 外部表(主键字段)

在新增表之后增加外键:修改表结构
alter table 表名 add constraint ''外键名字' foreign key'外键字段' references 父表 '主键字段';

约束模式

外键有三种约束模式(都是针对父表的约束):

①district 严格模式(默认的),父表不能删除或者更新一个已经被子表数据引用的主键字段(不是被引用的记录,被引用的记录除外键字段外其它字段可以更新删除)

②cascade 级联模式,父表对主键字段的更新会使子表关联的外键字段对应更新;父表对主键字段的删除会使子表关联的外键字段所在记录被删除

set null 置空模式,父表对主键字段的更新或删除会使子表关联的外键字段被置空;

通常一个合理的约束模式,删除的时候子表置空,更新的时候子表级联操作

指定约束模式:foreign key(外键字段) references 父表(主键字段) on delete set null on update cascade;

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注