MySQL基础(一):库操作、表操作与数据类型
一:MySQL简介
MySQL是一种DBMS(数据库管理系统),即它是一种数据库软件;是基于客户机-服务器的DBMS
MySQL优点:
成本低:MySQL是开放源代码的,一般可以免费使用
性能高:执行非常快
可信赖:某些非常重要和声望很高的公司、站点使用
简单:很容易安装和使用
二:几个基础操作与概念
1,基础操作
1.1,客户端登录:这里使用MySQL命令行实用程序(MySQL自带的客户端软件),MySQL服务器安装在本机
登录命令>>mysql -h 127.0.0.1 -P 3306 -u root -p (可简写为mysql -u root -p)
1.2,SQL代码注释:--注释语句 (好的习惯:注释放在SQL代码之前)
1.3,help; 可查看命令列表 help 关键字;查看该关键字的使用信息(如help select; 查看select相关使用信息)
\s 等同于 status; 查看数据库服务端的状态
\c 取消命令 \g 指示发送SQL语句(相当于分号) \G 字段列表垂直显示
1.4,SQL语句不区分大小写 SQL语句以分号 ;(或\g)结尾!
1.5,退出MySQL客户端:quit; 或 exit;
1.6,更改SQL语句的分隔符
DELIMITER // --把sql语句的分隔符由;改为//
DELIMITER ; --把sql语句的分隔符由//改回其默认符号;
2,基础概念
2.1 约束:constraint 管理如何插入或处理数据库数据的规则
2.2 主键:primary key 用来保证一个列(或一组列)中的值是唯一的,并且永不改动;即表中的一个列(或多个列)的值唯一标识表中的行
一张表中必须有,并且只能有一个主键;一般把一张表的id设为主键
主键的要求:
主键值唯一且不为NULL;
包含主键值的列不修改或更新;
主键值不能重用,即从表中删除某一行,其主键值不分配给新行
--形式一:
id int primary key auto_increment
--形式二:
id int,
primary key(id)
--形式三:联合主键
primary key(id,name)
2.3 外键:是表中的一个列,其值必须在另一表的主键中列出
FOREIGN KEY(vendor_id) REFERENCES vendor(id)
--同步更新,同步删除
FOREIGN KEY(vendor_id) REFERENCES vendor(id)
ON UPDATE CASCADE
ON DELETE CASCADE
2.4 唯一约束 UNIQUE:用来保证一个列(或一组列)中的数据唯一;这也是一种键
id int unique
联合唯一:
unique(ip,port)
三:库操作 database
数据库(database)保存有组织的数据的容器(通常是一个文件夹)
show databases; 查看所有存在的库名
use db1; 打开数据库db1 记住,必须先使用USE打开数据库,才能读取其中的数据。
select database(); 查看当前所在的库
创建库:create database db1;(可指定字符集create database db1 charset utf8;)
查库的信息:show create database db1;
修改:alter database db1 charset gbk;
删:drop database db1;
四:表操作 table
表是一种结构化的文件,可用来存储某种特定类型的数据,也称之是某种特定类型数据的结构化清单(可把表想象为一个网格)
列:colomn 表中的一个字段(可看成表头)。所有表都是由一个或多个列组成的
行:row 表中的一条记录
字段定义:中括号[ ]表示可选 竖线 | 表示或,即多选一
column_definition:
data_type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
[COMMENT 'string']
[COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
[STORAGE {DISK|MEMORY|DEFAULT}]
[reference_definition]
data_type:数据类型 格式如:INT[(length)] [UNSIGNED] [ZEROFILL] 或 CHAR[(length)]
DEFAULT:设置默认值
AUTO_INCREMENT:自增,默认从1开始,步长为1
UNIQUE:一种键 约束每个列值唯一
PRIMARY KEY:主键,约束每个列值唯一且不为NULL
创建表:create table 表名(字段名1 字段定义,字段名2 字段定义)
查:
show tables; 查看该库内所有的表名
show table status; 查看该库内所有表的状态信息
show create table t1; 查看表t1的信息
describe t1; 简写:desc t1; 查看表的结构信息(也可show columns from t1;)
show table status like 't1'; 查看表t1的状态信息
改:
alter table t1 modify name char(16);
alter table t1 add 字段名 字段定义 [first|after 字段名]
alter table t1 add [primary key(字段名) | unique(字段名) | foreign key(字段名)]
alter table t1 drop 字段名
alter table t1 change 旧字段名 新字段名 字段定义
rename [as|to] 新表名
删表:drop table t1;
五:数据类型
数据类型datatype:所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据
1,字符串类型:
1.1,有两种基本的串类型:定长串和变长串
定长串:接受长度固定的字符串,其长度是在创建表时指定的;不允许多于指定的字符数目;若少于指定的字符数目,以空格补充。
CHAR 属于定长串
变长串:存储可变长度的文本;只有指定的数据得到保存(最大的定长内的数据),额外的数据不保存。VARCHAR 和 TEXT 属于变长串
BINARY(M):与CHAR类似,但只是用来存二进制字符串;M不写默认为1
VARBINARY(M):与VARCHAR类似,但只是用来存二进制字符串
1.2,CHAR 与 VARCHAR的比较
当CHAR值被存储时,它们被用空格填充到指定的长度。 当检索到CHAR值时,除非启用了PAD_CHAR_TO_FULL_LENGTH SQL模式,否则将删除尾随空格。
与CHAR相反,VARCHAR值存储为1字节或2字节长度前缀加数据。 长度前缀表示该值中的字节数。 如果值不超过255个字节,则列使用一个长度字节,如果值可能需要超过255个字节,则使用两个长度字节。
MySQL处理定长列远比处理变长列快得多;MySQL不允许对变长列(或一个列的可变部分)进行索引,这也会极大地影响性能。所有使用CHAR性能更优,但存在浪费存储空间的问题;使用VARCHAR一定程度上节省存储空间,但性能上较差
1.3, 二进制数据类型:字符串类型的一种
二进制数据类型主要用来存储很大的二进制字符串,如图像、多媒体等
BLOB是一个二进制大对象,可以容纳可变数量的数据;BLOB值被视为二进制字符串。
2,数值类型
2.1 整型
INT[(M)] [UNSIGNED] [ZEROFILL]:
M:表示最大的显示宽度
UNSIGNED:指定为无符号的
ZEROFILL:指定用0填充
type | 存储字节 | 有符号范围(默认)signed | 无符号范围unsigned |
TINYINT | 1 | -128 to 127 |
0 to 255 |
SMALLINT | 2 | -32768 to 32767 |
0 to 65535 |
MEDIUMINT | 3 | -8388608 to 8388607 |
0 to 16777215 |
INT(INTEGER) | 4 | -2147483648 to 2147483647 |
0 to 4294967295 |
BIGINT | 8 | -2^63 to 2^63-1 | 0 to 2^64-1 |
M:数字总位数
D:小数点后的数字位数
UNSIGNED:指定为无符号的
ZEROFILL:指定用0填充
类型 | 名称 | 精确度 | 取值范围 |
FLOAT | 单精度浮点数 | 能精确到约7位小数 | 允许值为-3.402823466E + 38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E + 38 |
DOUBLE | 双精度浮点数 | 能精确到15位小数 | -1.7976931348623157E + 308至-2.2250738585072014E-308,0 和2.2250738585072014E-308至1.7976931348623157E + 308 |
DECIMAL(或DEC) | 精度可变浮点数 | 能精确到30位小数 | (M,D) 最大(65,30) 默认(10,0) |
3,日期类型
注意:从MySQL 5.6.6开始,YEAR(2)已过时。 现有表中的YEAR(2)列与以前一样被处理,但新的或变更表中的YEAR(2)被转换为YEAR(4)。
六:表关系与用户操作
1,表关系
①一对多/多对一:
关联方式:在多的一方定义foreign key
②多对多:
关联方式:建立第三张表,定义两个foreign key关联第一张表和第二张表
③一对一:
关联方式:同时定义unique + foreign key
2,用户操作
--查看所有的用户
use mysql;
SELECT user from user;
--创建新用户
CREATE USER rock1 IDENTIFIED BY '123';
--更改用户名
RENAME USER rock1 TO rock;
--更改密码
SET PASSWORD FOR rock = Password('new123');
SET PASSWORD = Password('123');
--删除用户
DROP USER rock;
--查看某个用户的权限
SHOW GRANTS FOR rock;
--设置用户权限
GRANT SELECT ON tb1.* TO rock;
--设置某用户全部权限
GRANT ALL TO rock;
--解除用户权限
REVOKE SELECT ON tb1.* FROM rock;