mysql
基本介绍
1.什么是数据库:管理数据的仓库,实现数据共享,高效使用数据
2.数据表:数据表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构
(记录,行) 字段(属性,列)
3.数据类型:数据类型决定来数据在计算机的存储格式,代表不同的信息类型:
整数数据类型,浮点数据类型,精确数据类型,二进制数据类型,日期/时间数据类型,字符串数据类型
4.主键(Primary key)又称主码,用于唯一地标治表的每一条记录,可以定义表中的一列或多列
为主键,主键列上不能有两行相同的值,也不可能为空指。
SQL语句:
1.对数据库进行查询和修改的语言叫SQL
2.SQL包含以下4个部分:
1.数据定义语言(DDL): DROP, CREATE, ALTER语句
2.数据操作语言(DML): INSERT(插入), UPDATE(修改), DELETE(删除)语句
3.数据查询语言(DQL): SELECT语句
4.数据控制语句(DCL): GRANT, REVOKE,COMMIT,ROLLBACK等语句
3.数据访问接口:不同语言访问接口不一样 python--pymysql
4.新特点:1.支持JSON 2.性能和可扩增,安全 InnoDB优化
数据库存储引擎(InnoDB, MyISAM)
1.SHOW ENGINES \G #查看数据的存储引擎,yes是可以使用,no是不能使用,default是默认的存储引擎加来G以后就不需要加分号,否则会报错
数据管理系统(DBMS)
2.InnoDB支持外键约束(FOREIGN KEY),InnoDB存储引擎完全与mysql服务器整合,InnoDB
存储为在主内存
使用存储引擎,InnoDB:用于事务处理应用程序,逻辑管理比较复杂的
MyISAM:主要用于非事务表,提供高速的存储和检索
不同的表有不同的特性
操作数据库
1.创建数据表是在系统磁盘上划分一块区域用于管理数据的存储和管理
1.mysql> SHOW DATABASES; #查看所有数据库 一般变量用大写,都是sql分
2.CREATE DATABASE database_name #创建数据库
3.SHOW CREATE DATABASE db_test\G #展示创建的数据库定义 \G代表一行一行显示
4.DROP DATABASE database_name #删除数据库
操作数据表:
1.在数据库中,数据表是数据库中最重要的,最基本的操作对象,是数据存储的基本单位,
数据表被定义为列的集合,数据在表中按照行和列格式来存储的,每一行代表一条唯一的记
录,每一行代表记录中的一个域
2.创建数据表:
1.USE <db_name>; #选择数据库 SHOW TABLES; 查看数据表
2.CREATE TABLE <table_name>
(
字段1, 数据类型 [列级别约束条件] [默认值],
字段2, 数据类型 [列级别约束条件] [默认值],
....
[表级别约束条件]
);
mysql> CREATE TABLE tb_test
-> (
-> id INT(11), #员工编号 or PRIMARY KEY,
-> name VARCHAR(25), #员工名字
-> deptId INT(11), # 所在部门
-> salary FLOAT #工资
->PRIMARY KEY(id)
-> );
1.要创建的表的名称,不区分大小,不能使用SQL语言中的关键字,如
DROP,ALTER,INSERT
2.数据表中每一列(字段)的名称和数据库类型,如果创建多个列,要用逗号隔开
3.使用主键约束:主键又称主码,是表中一列或多列的组合,
主键约束(Primary Key Constraint)要求键列的数据唯一,并且不允许为空,主键能够唯
一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且加快速度
查询,相当于是身份证和人一一对于
1.单字段主键是由一个字段组成,
1.字段名 数据类型 PRIMARY KEY [默认值]
2.在定义完成所有列之后指定主键
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
2.多字段联合主键,主键由多个联合组合,
PRIMARY KEY [字段1, 字段2, ...,字段n]
mysql> CREATE TABLE tb_test4
-> (
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> PRIMARY KEY(name,deptId)
-> );
4.使用外键约束:外键用来在两个表的数据之间建立链接,它可以是一列或者多列。
一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,
若不为空值,则每一个外键值必须等于另一个表中主键的某个值
外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键,
外键主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个白表中具有
关联关系的行,外键的作用是保持数据的一致性,完整性,列如,部门表tb_dept的主键
id,在员工tb_test5中有一个键deptId与这个id关联
字表和父表,主表和从表
创建外键的语法规则如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [,字段名2,...]
REFERENCES <主表名> 主键列1 [,主键列,...]
字表的外键必须要关联父表的主键,且关联的数据类型必须匹配,如果类型不一样,则
创建字表时,会报错
5.使用非空约束:指字段的指不能为空,对于使用了非空约束的字段,如果用户在添加
数据时,没有指定值,数据库系统会报错,
字段名 数据类型 not null
6.使用唯一约束(Unique Constraint)要求该列唯一,允许为空,但只能出现一个空值。
唯一约束可以确保一列或者几列不出现重复值:
(1)在定义完成之后直接指定唯一约束,
字段名 数据类型 UNIQUE
7.设置表的属性值自动增加
字段名 数据类型 AUTO_INCREMENT
查看数据表结构
1.DESC 表名;
2.SHOW CREATE TABLE <表名\G>
修改数据表
1.ALTER TABLE <旧表名> RENAME [TO] <新表名>; #修改表名 其中to是可选参数,不影响结果
2.ALTER TABLE <表名> MODIFY <字段名> <数据类型> #其中表名指要修改数据类型的字段所在表的名称,字段名是指需要修改的字段,“数据类型”指修改后字段的新数据类型。
ALTER TABLE tb_test MODIFY name VARCHAR(30);
3.ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>; #修改字段名
ALTER TABLE tb_test CHANGE location loc VARCHAR(50);
4.ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [FIRST] | AFTER 已存在字段名]; #增添字段 FIRST其作用是将新添加的字段设置为表的第一个字段,“AFIER”为可选参数,其作用是添加的字段添加到指定的“已经存在字段名"后面
5. ALTER TABLE <表名> DROP <字段名>; 删除字段
6. ALTER TABLE tb_test MODIFY column1 VARCHAR(12) AFIER location; #修改字段到表的指定列之后
7. 更改表的存储引擎:ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;
ALTER TABLE tb_test ENGINE=MyISAM;
8.删除表的外键约束:ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>
删除数据表:
DROP TABLE tb_name
数字类型
int
int最大长度是11 unsigned正数的意思
如果不定义长度默认是11
int的长度不影响存储的数字
简单的来说
int(M) M是显示宽度和存储没有关系
字符串类型
CHAR 和 VARCHAR
CHAR长度被固定为创建所声明的长度(1--255) 占空间,速度快,就是多少个汉字255是字符集
VARCHAR类型的值是可长的字符串取值和CHAR一样 节省空间,速度慢
255只的是字节,每个汉字的3个字节
TEXT BLOB 存储长文本, 搜索内容不区分大小写
BLOB存储二进制数据 搜索的内容区分大小写
存图片用二进制,速度会很慢,容易拖垮项目,最好用路径名
AUTO_INCREMENT A…I自动增加
勾勾空 意思是可以为空的意思
字符和字节
字节是byte是计量存储的一种单位
字符是指计算机的使用文字和符号
ASCII中 一个英文占一个字节,一个汉字占两个字节
UTF-8中一个英文两个字节,一个汉字3个字节
MySQL的索引
书的目录,加快查询速度
普通索引 key index一样的 key显示的是MUL
唯一索引 unique 不能重复,唯一的索引 一般用于id
主键索引 primary 不能重复,需要的,速度很快,一般和AUTO_INCREMENT结合使用,达到计数的效果 ,一个表只能有一个主键索引
全文索引 fulltext 只能在MyISAM才可以在MySQL小于5.6以下的,5.6以后Innodb就支持了 mul
解决搜索的情况 就是解决增快模糊查询的速度的,但是,只能用于英文,英文之间有空格,汉字之间没有
空格,怎么事务,把汉字的所有字用空格隔开 分词
外键约束 foreign key 也可以叫外键索引 一个学生对应一个成绩,避免有成绩没有学生
成绩表是跟着用户表走的
foreign key(stu_id) reference user(id) 只能用于innodb 解决表依附关系的
数据优化当数据量小的时候看不出来数据库的优化,当数据量大的时候,就有很大的区别
一般是20ms