终端操作MySQL笔记
一、数据库命令
1、连接数据库
mysql -uroot -p密码
2、创建数据库
create database 库名;
3、切换到指定数据库
use 库名;
4、显示数据库列表
show databases;
5、显示数据库建立语句
show create database 库名;
6、修改数据库
alter database 库名 选项;
7、删除数据库
drop database 库名;
二、数据表命令
1、创建数据表
create table 数据表名(字段名1 类型 修饰符,字段名2 类型 修饰符,字段名3 类型 修饰符,…);
create table news(
id int primary key auto_increment,
title varchar(50),
author varchar(20),
content text);
2、查看数据表列表
show tables;
3、查看数据表结构
desc 数据表名;
4、查看数据表建表语句
show create table 数据表名;
5、删除数据表
drop table 数据表名;
6、修改数据表
alter table 数据表名 选项;
7、新增字段
alter table 数据表名 add column 字段名 类型 修饰语句 位置;
alter table news add column newstime timestamp default current_timestamp after content;
8、修改字段定义
alter table 数据表名 modify column 字段名 新的定义;
alter table news modify column content longtext;
9、修改字段名及定义
alter table 数据表名 change column 旧字段名 新字段名 新的定义;
10、删除字段
alter table 数据表名 drop column 字段名;
三、记录操作命令
1、新增记录
insert into 数据表名(字段1,字段2,…,字段n) values(值1,值2,…,值n);
注意:值的数量与类型必须与字段列表数量与类型定义一致
2、查看记录
select 字段列表 from 数据表名 where 条件 order by 字段名 desc limit m,n;
select * from news;
select * from news where id=10;
select * from news order by id desc limit 10;//排序(asc升序、desc降序)
注意:
1、select语句时SQL中最为强大与复杂的查询语句,有七大子句,每段子句都可以省略,
如果出现,必须出现在正确的位置顺序上,不可以调换先后顺序
2、limit用法
检索记录行 6-15
select * from 表明 limit 5,10;
检索记录行 96-last,为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数-1
select * from 表明 limit 95,-1;
如果只给定一个参数,它表示返回最大的记录行数目,检索前 5 个记录行,LIMIT n 等价于 LIMIT 0,n
mysql> SELECT * FROM table LIMIT 5;
3、修改记录
update 数据表名 set 字段1=值1 and 字段2=值2 where 条件;
update news set title=‘xxxxx’ where id=1;
4、删除记录
delete from 数据表名 where 条件;
delete from news where id=10;
四、数据类型
1、数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
tinyint | 1 字节 | (-128,127) | (0,255) | 小整数值 |
smallint | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
mediumint | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
int | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
bigint | 8 字节 | (-9 223 372 E+5,9 223 372E+5) | (0,18 446 744 073 709 551 615) | 极大整数值 |
float | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
2、日期类型
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
date | 3 | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 日期值 |
datime | 8 | 1000-01-01 00:00:00 ~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
time | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
year | 1 | 1901/2155 | YYYY | 年份值 |
3、字符串类型
类型 | 大小 | 用途 |
---|---|---|
char | 0-255字节 | 定长字符串 |
varchar | 0-65535 字节 | 变长字符串 |
blob | 0-65 535字节 | 二进制形式的长文本数据 |
text | 0-65 535字节 | 长文本数据 |
注意:var()与varchar()的区别在于
1、var()是定常的,哪怕存储的字符串没有达到"()"中数字的上限
2、var()依然会占用空格来填充空间.而varchar()则是不定长的,没有达到"()"中的上限则会自动去掉后面的空格;
五、建表约束
1、主键约束
它能够唯一确定一张表中的一条记录,增加主键约束之后,就可以使得字段不重复而且不为空
create table user(
id int primary key,
name varchar(20));
2、复合主键
一张表只能有一个主键,但根据需要,我们可以设置多个字段同时为主键、
注意:以下仅作语法参考,应结合实际情况选择是否使用复合主键
create table user(
id int ,
name varchar(20)
primary key(id,name));
3、自增约束
create table user(
id int auto_increment,
name varchar(20));
4、唯一约束(即该字段在数据中唯一
create table user(
id int unique,
name varchar(20));
5、非空约束(即该字段在数据中不为空
create table user(
id int not null,
name varchar(20));
6、默认约束(即该字段在插入数据或其他情况未赋予值为建表时的默认值
create table user(
id int default 0,
name varchar(20));
7、外键约束(一张表的一个字段受限于另外一张表的一个字段对应的值。这里涉及到两张表:被引用的表叫主表(父表),另外一张叫从表(子表)。它们的关系为主从表关系(父子表关系)
子表:
定义了外键的表,外键的取值要么取父表中字段对应的值,要么取NULL值,严重受限于父表
父表:
被引用的字段要具有唯一性(绝大多数都是用的父表的主键),理论上是可以一张表里的一个字段引用另一个字段,但一般都是用两张表
建表:
1、先建立父表,后建立子表(因为子表要用到父表)
2、除非先不考虑外键(建完表后再加),表多的时候可以不考虑建表顺序。弊端:对数据要求很严格,一个垃圾数据都不能放
插入数据:
一般先插入父表数据,再插入子表数据。除非把子表的外键值设置成NULL值,否则会出完整性错误
删除数据
子表中有关联的数据,需要先删子表,后删父表
删除表
先删子表,后删父表,除非使用casecade constraints 解除关联
例子:
create table calsses(
id int primary key auto_increment,
name varchar(20));
create table student(
class_id int primary key auto_increment,
name varchar(20)
foreign key (class_id) references classes (id));
建表之后添加主键约束(加其他约束与此同理
create table student(
class_id int,
name varchar(20));
1、直接添加
alter table student add primary key(id);
2、利用modify修改字段添加
alter table student modify id int primary key;
建表之后删除主键约束
alter table student drop primary key(id);
六、MySQL事物
1、四个特性
**原子性:**一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
**一致性:**在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。、
**隔离性:**数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
**持久性:**事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
2、MySQL事务处理方法
用begin、rollback、commit实现
begin; 事物开始
rollback; 事务回滚
commit; 提交且结束事物
通过设置autocommit的置实现
set autocommit 0; 取消自动提交即开始事物
set autocommit 1; 开启自动提交即结束事物