进入Mysql的两种方式
1.明文进入: mysql -u账号 -p密码
2.密文进入: mysql -u账号 -p (enter后提示输入密码)
mysql 中 保存了很多数据库, 一个数据库中保存了很多表
MySQL数据类型:
-
整数类型
- TINYINT 很小的整数 一个字节 -128~127 0~255
- SMALLINT 小的整数 两个字节 -32768~ 23767 0~65535
- MEDIUMINT 中等大小的整数 三个字节 -8388608~8388607 0~16777215
- INT 普通大小的整数 四个字节 -21474483548~2147483647 0~4294967295
- BIGINT 大整数 八个字节 略
- 补充 : INT(10) 10 表示这个字段显示的宽度, 既存储11位数显示10位
-
浮点数类型和定点数类型
-
FLOAT 单精度浮点数 四个字节
-
DOUBLE 双精度浮点数 八个字节
-
DECIMAL(M,D) 压缩的'严格'的定点数 M+2个字节
-
三者的区别:
区别一: FLOAT 显示后面的小数点位大概在40多位, DOUBLE 能显示的为300多位, DECIMAL 小数点后面能显示的位数和 DOUBLE 差不多 区别二: FLOAT 和 DOUBLE 在不指定精度时,也就是不用(M,D),默认按照录入数据的精度,而 DECIMAL 如不指定精度默认为(10,0) 区别三: 浮点数对于定点数(DECIMAL)的优点就是在一定长度下,浮点数能够显示更大的数据范围,但是缺点 是会引起精度问题. 什么时候使用什么数据类型? 对精度要求较高时,比如货币、科学数据等,使用 DECIMAL 比较好. 其他时候一般使用 DOUBLE. 避免做浮点数的比较,比如加,减,比大小, 这样做会引起精度丢失的问题.
-
M,D的解释 :
M:数字的总位数, 就是看到多少个数字 比如2.566, M就是 4 D:小数点后面能保留几位, 比如2.566, M就是 3 FLOAT 和 DOUBLE 数据类型后面也可以加这个参数,位数不足用0补充
-
-
-
日期与时间类型
-
YEAR
-
YYYY 1901 ~ 2155 一个字节
插入完整年份时候,数字,字符串都可以 INSERT INTO tmp VALUES(2010),('2010'),("2010") 插入省略的年份时 插入数字: INSERT INTO tmp VALUES(0),(00),(77) 数据库中会存储 0000, 0000, 1977 三个值 插入字符串: INSERT INTO tmp VALUES('0'),('00'),('77') 数据库中会存储 2000, 2000, 1977 三个值 规则: 1.插入省略年份 数字 0, 00会转程0000, 字符串'0','00'会转成 2000 2.在不超过70, 也就是小于70, 会生成2000年以上的年份,超过70,则会生成2069如此的年份 3.推荐使用完整年份
-
-
TIME
- HH:MM:SS -838:59:59 ~ 838:59:59 三个字节
格式:HH:MM:SS HH表示小时, MM表示分钟, SS表示秒 取值范围:-838:59:59 ~ 838:59:59, 以字符串的方式插入 解释:这里的时间不仅仅可以用来表示一天的时间(也就是24小时),还可能是某件事过去的时间或者两件 事之间的时间间隔.
-
DATE
- YYYY-MM-DD 1000-01-01 ~ 9999-12-3 三个字节
格式:YYYY-MM-DD YYYY表示年份 MM表示月份 DD表示日 取值范围: 1000-01-01 ~ 9999-12-3 使用字符串插入,也可以使用19980304这中数字的方式插入 注意:这里的年份也和YEAR数据类型相同有省略的输入方式,规则一样 980304 对应 1998-03-04
-
DATETIME
-
YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 八个字节
格式:YYYY-MM-DD HH:MM:SS DATE 和 YEAR 的结合体, 另外两个的特点这里也适用. PS: 这里的DATE只能表示一天的时间(最多24h)
-
-
TIMESTAMP
-
YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC 四个字节
格式:YYYY-MM-DD HH:MM:SS 解释:世界标准时间,显示宽度固定在19个字符.存储字节和支持的范围不一样. DATETIME 存入什么取 出就是什么, TIMESTAMP 存入后如果更换时区, 取出的值会相应做出转换.
-
-
-
字符串类型(主要说CHAR,VARCHAR)
-
CHAR
CHAR(M) 固定长度的,非二进制字符串 M个字节, 1<=M<=255 解释: 固定长度,M值为多少,那么M就是其实际存储空间的值,就算插入的数据少于M位,其存储空间还是那么大
-
VARCHAR
VARCHAR(M) 变长的非二进制字符串 L+1个字节, L<=M 和 1<=M<=255 解释: 长度可变的字符串,跟CHAR相反,会根据实际存储的值来确定存储空间的大小,存入L字节长度的值,实际 占用的存储空间为L+1个字节.
-
TINYTEXT
-
TEXT
-
MEDIUNTEXT
-
LONGTEXT
-
ENUM
-
SET
-
-
二进制类型
- BIT
- BINARY
- VARBINARY
- TINYBLOB
- BOLB
- MEDIUMBLOB
- LONGBLOB
命令大全:
库相关:
show databases
查看mysql中所有的数据库create database 数据库名称
创建一个新的数据库drop database 数据库名称
删除一个数据库use 数据库名称
使用哪个数据库, 切换到该数据库下操作
表相关:
show tables
常看当前数据库下的所有表
创建表:
-
- 创建一个数据表 create table 数据表名称 ( 字段名 数据类型[列级别条件], 字段名 数据类型[列级别条件], 字段名 数据类型[列级别条件] );
-
创建无约束的表
- 创建没有约束的student表 create table student( id INT(11), name VARCHAR(12), age INT(11) );
-
创建有约束的表
-
单个主键约束
- 创建有约束的student表 第一种: create table student( id INT(11) PRIMARY KEY, name VARCHAR(12), age INT(11) ); 第二种: create table student( id INT(11), name VARCHAR(12), age INT(11), PRIMARY KEY(id) );
-
多主键约束(复合主键)
- id字段和name字段不能同时一样 create table student( id INT(11) PRIMARY KEY, name VARCHAR(12) PRIMARY KEY, age INT(11) );
-
外键约束
- 外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。 - 这样被外键关联的两种表的关系可以称为父子表或者主从表。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表。 - 子表被外键约束修饰的字段必须和父表的主键字段的类型一样。 create table tableA( id INT(11), name VARCHAR(22), location VARCHAR(50), PRIMARY KEY(id) ); create table tableB( id INT(11), name VARCHAR(22) NOT NULL, deptid INT(11), PRIMARY KEY(id), CONSTRAINT tableA_tableB_1 FOREIGN KEY(deptid) REFERENCES tableA(id) ); 解释:tableB中有一个名为tableA_tableB_1的外键关联了tableA和tableB两个表,被外键约束修饰的字 段为tableB中的deptid,对应的主键字段为tableA中的id
-
非空约束
`NOT NULL` 被该约束修饰了的字段,不能为空,主键约束 = 非空约束 + 唯一约束 create table tableA( id INT(11), name VARCHAR(22) NOT NULL, location VARCHAR(50), PRIMARY KEY(id) ); 解释: name 不能为空
-
唯一约束
`UNIQUE` 被该约束修饰了的字段,表示该字段中的值唯一,表中这个字段不能有相同的值 create table tableA( id INT(11), name VARCHAR(22) UNIQUE, location VARCHAR(50), PRIMARY KEY(id) ); 解释: name 不能有重复的值
-
默认约束
`DEFAULT 默认值` 被该约束修饰了的字段, 在录入时如果没有写值, 数据库中会记录为默认值 create table tableA( id INT(11), name VARCHAR(22) UNIQUE, location VARCHAR(50), deptid INT(11) DEFAULT 1111, PRIMARY KEY(id) ); 解释: deptid 默认值为1111
-
自增约束
`AUTO_INCREMENT` 被该约束修饰了的字段, 只能是整数, 默认值为1, 一般都是修饰主键 create table tableA( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(22) NOT NULL ); 解释:每插入一条数据,主键值(id)自动加1
-
-
查询表:
-
查看表基本结构 :
DESCRIBE student;
-
查看创建表时使用的语句:
show create table student;
- 语句后加G
show create table studentG;
查询结果更直观
- 语句后加G
修改表:
-
修改表名:
alter table 旧表名 rename to 新表名;
-
修改表中的字段名:
altere table 表名 change 旧字段名 新字段名 新数据类型;
-
修改表中的数据类型:
alter table 表名 modify 字段名 数据类型[约束条件];
-
修改字段的排列:
alter table 表名 modifi 字段1 数据类型 FIRST|AFTER 字段2;
-
添加字段:
alter table 表名 ADD 新的字段名 数据类型 约束条件[FIRST|AFTER已存在的字段];
- 在一个特定的位置添加一个字段, 如果不指定位置默认添加在最后
-
删除字段:
alter table 表名 drop 字段名;
-
删除外键字段:
alter table 表名 drop 外键名;
- 外键约束名并不是被外键约束的那个字段名,而是在创建外键约束时起的名字
-
更改表的存储引擎:
alter table 表名 engine = 更新后的存储引擎名;
删除表:
-
删除无关联的表:
drop table 表名;
-
删除被其他表的关联的主表: <两种方式>
- 先删除子表,再删除父表
- 先删除外键关系,再删除父表