MySQL数据库
一、数据库概述
1.数据:描述事物的符号记录称为数据,可以是文字、图片、图像、声音、语言等多种表现形式。
2表:即文件。用来存放多行内容/多条记录
3.数据库:即文件夹,用来组织文件/表
4.数据管理系用(软件):MySQL 、Oracle 、SQlite、Access 、MS MySQL Server等;管理数据库
5.数据库管理器:即一台计算机;运行数据管理软件。
SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型: 1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER 2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT 3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
sql语句
#1. 操作文件夹(库) 增:create database db1 charset utf8; # 数据库名 查:show databases; 改:alter database db1 charset latin1; # 只能改字符编码 删除: drop database db1; #2. 操作文件(表) 先切换到文件夹下:use db1;
查看当前所在文件夹:select databese(); 增:create table t1(id int,name char); 查:show tables
desc t1 改:alter table t1 modify name char(3); alter table t1 change name name1 char(2); 删:drop table t1; #3. 操作文件中的内容/记录(记录) 增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3'); 查:select * from t1;
select id, name from t1 改:update t1 set name='sb' where id=2; 删:delete from t1 where id=1;
库操作
information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
mysql: 授权库,主要存储系统用户的权限信息
test: MySQL数据库系统自动创建的测试数据库
库的相关操作 创建库----------------CREATE DATABASE 数据库名 charset utf8; 可以由字母、数字、下划线、@、#、$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 查看数据库-------------show databases; ------------- show create database db1; ------------- select database(); 选择数据库---------------------------USE 数据库名 删除数据库---------------------------DROP DATABASE 数据库名; 修改数据库----------------------------alter database db1 charset utf8;
表操作
表类型就是存储引擎,不同的存储引擎有不同的存储机制。
查看支持的存储引擎------------show engines;
指定存储引擎-------------create table t1(id int)engines=innodb;
表的增删改查
表相当于文件,每一条数据(记录)都有对应的标题(字段)
创建表
create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #注意: 1. 在同一张表中,字段名是不能相同 2. 宽度和约束条件可选 3. 字段名和类型是必须的
查看表结构
describe t1; #查看表结构,可简写为desc 表名 show create table t1\G; #查看表详细结构,可加\G
删除表
DROP TABLE 表名;
修改表结构
语法: 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
复制表
1.复制表结构+记录 (key不会复制: 主键、外键和索引) mysql> create table new_service select * from service; 2.只复制表结构 mysql>create table select * from service where 1=2; (条件为假的时候) 3.复制某个表的表结构 mysql> create table t4 like employees;
数据类型
存储引擎决定了表得类型,表内的数据有着不同的数据类型,而数据类型是有宽度的不同的数据类型宽度是不一样的,是可以指定的。
#1. 数字: 整型:tinyinit int bigint 小数: float :在位数比较短的情况下不精准 double :在位数比较长的情况下不精准 0.000001230123123123 存成:0.000001230000 decimal:(如果用小数,则用推荐使用decimal) 精准 内部原理是以字符串形式去存 #2. 字符串: char(10):简单,浪费空间,存取速度快 root存成root000000 varchar:精准,节省空间,存取速度慢 sql优化:创建表时,定长的类型往前放,变长的往后放 比如性别 比如地址或描述信息 >255个字符,超了就把文件路径存放到数据库中。 比如图片,视频等找一个文件服务器,数据库中只存路径或url。 #3. 时间类型: 最常用:datetime #4. 枚举类型与集合类型
整数类型(tinyint int bigint )
一般用 int 就可以
int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围
整形类型的存储宽度是可以不用指定的!!!! 可以指定的显示宽度
浮点类型(folat/ double / decimal)
一般用folat 就行了
#FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] # m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30
日期类型
YEAR YYYY(1901/2155) DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
字符类型 char(推荐使用) 和 varchar
注意:同一个表中尽量只是用一种字符类型
#注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定长,简单粗暴,浪费空间,存取速度快 字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节) 存储: 存储char类型的值时,会往右填充空格来满足长度 例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储 检索: 在检索或者说查询时,查出的结果会自动删除尾部的空格,
除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';) #varchar类型:变长,精准,节省空间,存取速度慢 字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html) 存储: varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来 强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用) 如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255) 如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535) 检索: 尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容
length:查看字节数
char_length:查看字符数
枚举类型和集合类型
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
约束条件