当前位置: 澳门新濠3559 > 数据库 > 正文

1.数据库系统(database system),  //创建一个数

时间:2019-11-08 05:43来源:数据库
一、数据库的创建 数据库-数据库、基本表、视图的创建,触发器的使用,视图触发器 一、数据库的创建 create database database_name; //创建一个数据库 drop database database_name; //删除数据库

一、数据库的创建

数据库-数据库、基本表、视图的创建,触发器的使用,视图触发器

一、数据库的创建

  create database database_name;  //创建一个数据库  

  drop database database_name;  //删除数据库

二、基本表的创建

  1. 创建表

    create table 表名

    (

      字段名1 数据类型 [not null] [默认值],

      字段名2 数据类型,

      字段名3 数据类型

    );

  例如:

    create table student

    (

      stu_num int auto_increment,  //自增量

      stu_name char(10) not null,

      stu_gender char(2),

      stu_score int,

      primary key(stu_num),  //主键

      foreign key(stu_name) references 另一张表(stu_name)  //外键

    );

  2. 常用约束

      主键约束: primary key(字段名);  //或在定义字段时直接在后面追加 primary key

    外键约束: foreign key(字段名) references 表名(字段名);

    非空约束: 字段名 数据类型 not null

    唯一性约束: 字段名 数据类型 unique

    默认约束: 字段名 数据类型 default 默认值

    自增量: 字段名 数据类型 auto_increment  //默认初始值为1,增量为1;如需从100开始,可以设置为auto_increment=100

  3. 修改表

    alter table 旧表名 rename 新表名  //修改表名

    alter table 表名 modify 字段名 数据类型;  //修改字段数据类型

    alter table 表名 change 旧字段名 新字段名 新数据类型  //修改字段名

    alter table 表名 add 新字段名 数据类型  //添加字段

    alter table 表名 drop 字段名  //删除字段

  4. 删除表

    drop table [if exist] 表名;

三、视图的创建

    create view view_name(字段名,字段名,字段名)

    as <select查询语句>

  例如:

    create view stu_sub(stu_num,stu_name)  //创建视图

    as select stu_num,stu_name

      from student;

    drop view stu_sub;  //删除视图

四、触发器

    create trigger trigger_name  //创建触发器

    on table(表名)

    for insert|delete|update

    as <sql_statement>(sql语句)

  例如:

    create trigger student_backup  //学生备份表随学生表的改变而改变

    on student        

    for insert,delete,update

    as

    begin

      if((select count(*) from deleted) > 0)

      begin

        delete from student_backup

        where stu_name in(select stu_name from deleted)

      end

      if((select count(*) from inserted) > 0)

      begin

        insert into student_backup

        select *

        from inserted

      end

    end

        

  

 

    

    

    

 

一、数据库的创建 create database database_name; //创建一个数据库 drop databa...

1.数据库系统(database system)

  create database database_name  DEFAULT CHARACTER SET utf8;  //创建一个数据库  

数据库系统是计算机系统中一种专门管理数组资源的系统,数据库存储的是一组或多组经过处理后的数据,管理这个数据库的软件成为数据库管理系统。

  drop database database_name;  //删除数据库

组成:
数据库(database) 存数据的
数据库管理系统(database managment system) 管理数据库

  1.1 DOS常用命令

MySQL数据库作用:

    1.1.1 数据库命令

​ 1) 持久保存

      mysqld install      // 安装MySQL数据库服务

​ 2) 方便查询并提取满足条件的数据, 数据访问速度快

                net start mysql 或 net stop mysql     // 启动或停止MySQL服务

​ 3) 处理并发访问

      mysql -u username -p  // 登录MySQL管理系统  

​ 4) 权限管理

1.数据库系统(database system),  //创建一个数据库  。      use database_name;  // 引用数据库

2.数据库系统分类:
关系型数据库 : MySQL、SQLServer、oracle、db2、informix、sysbase
非关系型数据库:redis、 MogoDB

      show databases;    // 显示所有数据库

3.开发中常用的数据库
IBM:DB2
甲骨文:Oracle MySQL
Microsoft:SQL Server Access等等

      source path(.sql文件路径)  //导入数据库文件,生成数据库,即根据sql脚本生成数据库;例如:source F:mysql.sql

4.数据库在动态网站中有什么地位?
1、动态网站是对数据进行操作。浏览网站的时候会发现网页内容变化,页面的布局主体没有变化。
2、WEB系统的开发基本都离不开数据库,所谓的动态网站是基于数据库开发的系统,最主要的是围绕数据库来写程序(业务逻辑)。

    1.1.2 数据表操作命令

5.MySQL和mysql有什么区别:

      show tables;         // 显示某数据库中所有表

MySQL指的是完整的数据库系统。
mysql指的是一个叫mysql的客户端程序。

      desc table _name;   //显示表的字段信息

6.MySQL数据库的结构:
数据库->数据表->字段(多个字段组成了一行数据)

      show create table table_name;  //显示表的创建信息

数据库:存放信息的文件夹
数据库里面有一个一个的excel文件(数据表)

   1.2 查询关系运算符

数据表里面的数据是有数据行和数据列构成

  • =、 !=、 <>、<、<=、>、>=;
  • between   ·····  and ········;
  • in(set) ; //set是集合
  • is null;is not null
  • and ;
  • or;
  • not;
  • like  '%三';          //%表示任意多个字符,_表示任意单个字符

所看到的一行一行的数据是由一个或者多个字段组成的

  1.3 内连接和外连接

7.SQL:为了和MySQL进行交互,需要使用一种叫SQL(结构化查询语言)的语言来进行交互。SQL是当今的标准的数据库语言,很多数据库都使用SQL作为交互语言:SQL Server、Oracle

    >内连接:

数据定义语言(DDL):定义和管理数据对象,比如建立数据库、数据表
数据操作语言(DML):用于操作数据库对象中包含的数据。
数据库查询语言(DQL):用于查询数据库对象中包含的数据,能够对表进行一个查询。
数据控制语言(DCL):管理数据库的语言

        select  t1.id,t1.name,t1.age,t2.score  from table1_name t1  join table2_name t2 on t1.id=t2.id

8.连接数据库的步骤
1、连接MySQL服务器
2、选择数据库
3、对数据表进行增删改查。
4、关闭数据库

        或:

9.连接数据库
mysql
-u 用户名 root
-p 密码
-h 主机名
-P 端口号 3306

        select  t1.name,t1.age,t2.score  from table1_name t1 , table2_name t2 where t1.id=t2.id

数据库语法的特点:
mysql>
1、每个SQL命令都要使用分号来完成。
2、->表示MySQL需要你继续输入命令。
3、如果说有一条比较长的命令我就可以拆分成多行来执行。
4、'>表示等待下一行,等待以单引号开始的字符串的结束
5、">表示等待下一行,等待以双引号开始的字符串的结束。
6、查询的命令不区分大小写,通常使用大写字母来写出SQL关键字和函数名,用小写字母写出数据库、数据表和数据列的名字

    >外连接:

10.退出MySQL
quit
exit
q

        select  t1.id,t1.name,t1.age,t2.score  from table1_name t1  left join table2_name t2 on t1.id=t2.id    //左连接

常见操作
c 取消命令输入
g 代替结束符;
s 查看服务器端信息
h 查看帮助

        或:

11.创建数据库
格式:
create database if not exists 数据库名 default charset utf8;

        select  t1.id,t1.name,t1.age,t2.score  from table1_name t1 right join table2_name t2 on t1.id=t2.id    //右连接

注意:
1、数据库是唯一的
2、if not exists先判断是否存在这个数据库,存在不创建,不存在就创建。
3、创建数据库,并设定编码集为utf8

        select  t1.id,t1.name,t1.age,t2.score  from table1_name t1 full join table2_name t2 on t1.id=t2.id    //全连接,MySQL不支持!

12.显示当前数据库服务器下所有的数据库名
show databases;

   1.4 数据库备份和恢复

use 数据库名 选择数据库
注意:
windows下面数据库名是不区分大小写的,在Linux下面严格区分。

    a. 备份  

13.删除数据库
drop database 数据库名

      mysqldump -u root -p123 database_name>d:myDBdemo.sql 

查看已经选择的数据库
select database();

    b. 恢复

查看当前的数据库的版本号
select version();

       mysql -u root -p123 database_name<d:myDBdemo.sql

14.数据表的操作
show tables 查看数据库中的数据表。

      或:

创建数据表
格式:
create table 表名(列的一些信息);

      进入需要还原到的目的数据库;

例子:
create table t1(id int(12), name varchar(100));

      source d:myDBdemo.sql

create table `test t1`(id int(10), name varchar(50));

 

desc 表名 查看表的结构.

二、基本表的创建

show create table 表名 查看建表的语句

  2.1 创建表

G 格式化输出(文本式,竖立显示)

   数据类型:int,char,varchar,text(字符串类型),blob(字节类型);double(5,2)表示最多5位,其中2位小数。

drop table 数据表名

    create table 表名

drop table [if exists] 数据表名 尝试性的删除表。

    (

15.记录操作 增、删、改、查

      字段名1 数据类型 [not null] [默认值],

(1)插入数据
格式:
insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);

      字段名2 数据类型,

insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3);

      字段名3 数据类型

(2)查询表数据
格式:
select * from 表名;

    );

select 字段1,字段2,字段3 from 表名;

  例如:

select * from 表名 where 字段=某个值;

    create table student

(3)修改表数据
格式:
update 表名 set 字段=某个值 where 条件;

    (

update 表名 set 字段1=值1,字段2=值2 where 条件;

      stu_num int auto_increment,  //自增量

update 表名 set 字段=字段+值 where 条件;

      stu_name char(10) not null,

(4)删除数据
格式:
delete from 表名 where 字段=某个值;

      stu_gender char(2),

delete from 表名; (慎重使用)

      stu_score int,

delete from 表名 where 字段 = 值;

      primary key(stu_num),  //主键

清空表数据
truncate table 表名;

      foreign key(stu_name) references anotherTable_name(stu_name)  //外键

16.修改用户密码
在退出mysql服务的情况下 输入
1、mysqladmin -u 用户名 -p password 新密码
输入旧密码:

    );

2、登录到mysql的时候使用set password for '用户名'@'登录主机'=password('新密码');

  2.2 常用约束

 

      主键约束: primary key(字段名);  //或在定义字段时直接在后面追加 primary key

17.修改表的字段信息

    外键约束: foreign key(字段名) references 表名(字段名);

修改表的字符集
alter table 表名 charset utf8
修改字段的类型
alter table 表名 modify 字段名 字段类型
修改字段的名字并同时修改字段类型
alter table 表名 change 旧字段名 新字段名 字段类型
修改字段的字符集
alter table 表名 modify 字段名 类型 charset utf8
添加新字段
alter table 表名 add 字段名 类型
删除字段
alter table 表名 drop 字段名
修改表名
alter table 旧表名 rename as 新表名

    非空约束: 字段名 数据类型 not null

18.删除默认匿名的账户
为什么我直接输入mysql也能进入数据库中。是匿名用户,MySQL默认创建的。他有test和information_schema这两个库的权限。我们可以把他删掉

    唯一性约束: 字段名 数据类型 unique

删除匿名用户:drop user ''@'localhost';

    默认约束: 字段名 数据类型 default 默认值

19.MySQL数据库的数据类型:

    自增量: 字段名 数据类型 auto_increment  //默认初始值为1,增量为1;如需从100开始,可以设置为auto_increment=100

MySQL的数据类型分为四大类:数值类型、字串类型、日期类型、NULL。

  2.3 修改表

1 数值类型:
*tinyint(1字节) 0~255 -128~127
smallint(2字节)
mediumint(3字节)
*int(4字节)
bigint(8字节)
*float(4字节) float(6,2) float(m,d)
*double(8字节) double (m,d)
decimal(自定义)字串形数值 decimal(m,d)
m精度 d标度

    alter table 旧表名 rename 新表名  //修改表名

2 字串类型
普通字串
*char 定长字串 char(8)
*varchar 可变字串 varchar(8)

    alter table 表名 modify 字段名 数据类型;  //修改字段数据类型

二进制类型
tinyblob
blob
mediumblob
longblob

    alter table 表名 change 旧字段名 新字段名 新数据类型  //修改字段名

文本类型
tinytext
*text 常用于<textarea></textarea>
mediumtext
longtext

    alter table 表名 add 新字段名 数据类型  //添加字段

*enum枚举
set集合

    alter table 表名 drop 字段名  //删除字段

3 时间和日期类型:
date 年月日
time 时分秒
datetime 年月日时分秒
timestamp 时间戳
year 年

    alter table 表名 AUTO_INCREMENT=100  //设置自增量初始值为100

4 NULL值
NULL意味着“没有值”或“未知值”
可以测试某个值是否为NULL
不能对NULL值进行算术计算
对NULL值进行算术运算,其结果还是NULL
0或NULL都意味着假,其余值都意味着真

   2.4 删除表

MySQL的运算符:
算术运算符:+ - * / %
比较运算符:= > < >= <= <> !=
数据库特有的比较:in,not in, is null,is not null,like, between and
逻辑运算符:and or not

    drop table [if exist] 表名;

like: 支持特殊符号%和_ ; 其中 %表示任意数量的任意字符,_表示任意一位字符。

三、CRUD增删改查操作

表的字段约束:
unsigned 无符号(正数)
zerofill 前导零填充
default 默认值
not null 非空
auto_increment 自增 在产生一个唯一的标识或顺序值的时候,可以利用这个约束条件。这个约束条件只能用于整数类型,值一般从1开始。每行加1,插入一个null到一个auto_increment列时,MySQL将插入一个比出现过的最大值+1的值。一个表中只能有一个auto_increment列,并且必须定义为primary key或unique才能够使用

3.1 数据插入-Insert

primary key 主键索引 (非null并不重复)
unique 唯一索引 (可以为null但不重复)
index 常规索引

  1. 插入单条记录

19.建表语句格式:
create table 表名(
字段名 类型 [字段约束],
字段名 类型 [字段约束],
字段名 类型 [字段约束]
...
);

    insert into 表名(字段名,字段名,字段名)  //当插入所有字段时,字段名可以省略

实例:
mysql> create table stu(
-> id int unsigned not null auto_increment primary key,
-> name varchar(8) not null unique,
-> age tinyint unsigned,
-> sex enum('m','w') not null default 'm',
-> classid char(6)
-> );

    values('值1','值2','值3');

20.插入数据
1 插入指定字段
insert into t1(字段1,字段2,字段3...) values ('值1','值2','值3',....);
2 插入所有的字段
insert into t1 values ('值1','值2','值3',....);
3 插入多条数据
insert into t1(字段1,字段2,字段3...) values ('值1','值2'),('值1','值2')....;
4 插入结果
insert into t1(字段1,字段2,字段3...) select 字段1,字段2,字段3... from t1;
insert into t1() select * from t1;
5 插入单条数据
insert into t1 set 字段1=值1,字段2=值2....;

  2. 插入多条记录

21.查询数据

    insert into 表名(字段名,字段名,字段名)

格式:
select [字段列表]|* from 表名
[where 搜索条件]
[group by 分组字段 [having 子条件]]
[order by 排序 asc|desc]
[limit 分页参数]

    values('值1','值2','值3'),

 

      ('值1','值2','值3'),

##where条件查询

      ('值1','值2','值3');

  1. 查询班级为lamp138期的学生信息
    mysql> select * from stu where classid='lamp138';

  2. 查询lamp138期的男生信息(sex为m)
    mysql> select * from stu where classid='lamp138' and sex='m';

  3. 查询id号值在10以上的学生信息
    mysql> select * from stu where id>10;

  4. 查询年龄在20至25岁的学生信息
    mysql> select * from stu where age>=20 and age<=25;
    mysql> select * from stu where age between 20 and 25;

  5. 查询年龄不在20至25岁的学生信息
    mysql> select * from stu where age not between 20 and 25;
    mysql> select * from stu where age<20 or age>25;

  6. 查询id值为1,8,4,10,14的学生信息
    select * from stu where id in(1,8,4,10,14);
    mysql> select * from stu where id=1 or id=8 or id=4 or id=10 or id=14;

  7. 查询lamp138和lamp94期的女生信息
    mysql> select * from stu where classid in('lamp138','lamp94') and sex='w';
    mysql> select * from stu where (classid='lamp138' or classid='lamp94') and sex='w

  3. 插入一个查询结果

##LIKE 子句

    insert into 表名()

这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。

    select xxx  //返回值个数应和需插入字段个数相同

LIKE 子句中使用百分号%字符来表示任意字符,类似于UNIX或正则表达式中的星号*。

    from xxx

如果没有使用百分号%, LIKE 子句与等号=的效果是一样的。

 

LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
你可以使用 AND 或者 OR 指定一个或多个条件。
你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
可以使用regexp正则来代替 like

3.2 数据删除-Delete

1.查询name字段值是以zh开头的所有信息
mysql> select * from stu where name like "zh%";
mysql> select * from stu where name regexp "^zh"; --正则写法

  delete from student(表名)

2.查询姓名name中含有ang子串的所有信息
mysql> select * from stu where name like "%ang%";
澳门新濠3559,mysql> select * from stu where name regexp "ang";

  where name='zs'; 

3.查询姓名是任意四位字符构成的信息。
mysql> select * from stu where name like "____";
mysql> select * from stu where name regexp "^[a-z0-9]{4}$";

3.3 数据修改-Update

创建一个表结构和另一个表一样的结构

  update student(表名)

create table t3 like t1;
那么现在t3表的结构和t1表的结构是一样的,但是要注意数据是没有的

  set score=90

 

  where name='zs';

##MySQL的统计函数(聚合函数):max() min() count() sum() avg()

 

1.获取学生表中最大、最小以及平均年龄是多少?
mysql> select max(age),min(age),avg(age) from stu;

3.4 数据查询-select

2.获取学生表中男生m的数量
mysql> select count(*) from stu where sex='m';

  1. 模式

##GROUP BY 语句 分组

    select number,name,score

GROUP BY 语句根据一个或多个列对结果集进行分组。

    from student

统计班级信息,按性别分组,并统计每组人数;
mysql> select sex,count(*) from stu group by sex;

    where age>20

1.统计每个班级的人数
nysql> select classid,count(*) from stu group by classid;

    group by 字段名[字段名,字段名,字段名]  //一个或多个字段名

2.统计每个班级的,男生和女生各多少人数。
mysql> select classid,sex,count(*) from stu group by classid,sex;

      having <条件表达式>    //分组后的条件

##ORDER BY 排序 -- asc 默认升序 desc 降序

    order by 字段名 [ASC|DESC],字段名[ASC|DESC];  //默认升序

我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。

  2. 常用聚合函数

如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的ORDER BY子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。

    count(*)     //计算记录个数

你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
你可以设定多个字段来排序。
你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
你可以添加 WHERE...LIKE 子句来设置条件。

    count(字段名)  //对一列中的值计算个数

1.按年龄升序排序查询学生信息
mysql> select * from stu order by age;
mysql> select * from stu order by age asc; --默认asc升序 可省略

    sum(字段名)   //求一列值得总和(数值型数)

2.年龄降序排序
mysql> select * from stu order by age desc;

    avg(字段名)    //求一列值得平均值(数值型数)

3.查询学生信息,按班级做升序排序,相同班级按年龄降序排序
mysql> select * from stu order by classid asc,age desc;

    max(字段名)    //求一列值得最大值

##LIMIT 关键字 查询部分数据

    min(字段名)    //求一列值得最小值

-- 例如: .... limit m; 查询数据只显示前m条

 

-- 例如: .... limit m,n; 排除前m条,然后再查询出前n条

四、视图的创建

1.查询前5条信息
mysql> select * from stu limit 5;

    create view view_name(字段名,字段名,字段名)

2.排除前2条后再获取4条信息
mysql> select * from stu limit 2,4;

    as <select查询语句>

22.修改数据
格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 条件

  例如:

-- 将id为11的age改为35,sex改为m值
mysql> update stu set age=35,sex='m' where id=11;

    create view stu_sub(stu_num,stu_name)  //创建视图

-- 将id值为12和14的数据值sex改为m,classid改为lamp92
mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14 --等价于下面
mysql> update stu set sex='m',classid='lamp92' where id in(12,14);

    as select stu_num,stu_name

23.删除操作
格式:delete from 表名 [where 条件]

      from student;

-- 删除stu表中id值为100的数据
mysql> delete from stu where id=100;

    drop view stu_sub;  //删除视图

-- 删除stu表中id值为20到30的数据
mysql> delete from stu where id>=20 and id<=30;

五、触发器

-- 删除stu表中id值为20到30的数据(等级于上面写法)
mysql> delete from stu where id between 20 and 30;

    create trigger trigger_name  //创建触发器

-- 删除stu表中id值大于200的数据
mysql> delete from stu where id>200;

    on table(表名)

24.导入和导出
注意: 在操作导入和导出数据的时候 不要登录到mysql服务中,要退出mysql服务进行操作

    for insert|delete|update

-- 将lamp138数据库里面的所有的表导出
C:>mysqldump -u root -p lamp138 > C:lamp138.sql
Enter password:

    as <sql_statement>(sql语句)

---- 将lamp138数据库中的stu表导出
C:>mysqldump -u root -p lamp138 stu > C:lamp138_stu.sql
Enter password:

  例如:

-- 将lamp138库中的所有表导入

    create trigger student_backup  //学生备份表随学生表的改变而改变

C:>mysql -u root -p lamp138 < C:lamp138.sql
Enter password:

    on student        

-- 将lamp138库中stu表导入
C:>mysql -u root -p lamp138 < C:lamp138_stu.sql
Enter password:

    for insert,delete,update

*********************
-- 将所有的数据库进行导出
mysqldump -uroot -p密码 --all-databases --events > /tmp/bak.sql 所有数据库备份

    as

 

    begin

25.MySQL的权限管理
格式:
grant 权限 on 数据库.数据表 to '用户名'@'登录主机' identified by '密码'

      if((select count(*) from deleted) > 0)

刷新权限
flush privileges;

      begin

举例:
grant select,insert,update,delete on *.* to 'wjs'@'%' identified by '12345';

        delete from student_backup

安全的做法
grant select,insert,update,delete on pass.* to 'root'@'localhost' identified by '12345';
只针对localhost主机里面的 pass数据库里面的数据表进行增删该查

        where stu_name in(select stu_name from deleted)

删除用户
drop user 'xxoo'@'%'

      end

 

      if((select count(*) from inserted) > 0)

26.索引的作用:
索引是数据库中用来提高搜索性能的。我们通常在做数据库优化的时候通常先做索引的优化,数据量少的时候没效果,数据越多效果越明显。

      begin

查看表中都有哪些索引

        insert into student_backup

show index from 表名G

        select *

索引的分类:

        from inserted

##常规索引(index)
最基本的索引,没有任何限制

      end

添加表字段的常规索引
create index 索引名 on 表名(字段名)
alter table 表名 add index 索引名(字段名)

    end

在创建表的时候也可以进行添加
create table t2(
id int(10) unsigned auto_increment primary key,
name varchar(255), index 索引名(字段名)
);

       

删除表字段常规索引**
drop index 索引名 on 表名
alter table 表名 drop index 索引名

六、事务

##唯一索引(unique)
唯一索引是可以给每个字段进行添加的,添加完了之后字段里面的值就不可以重复了,主键索引和唯一索引类似,
但是数据表里的主键索引只能加在一个字段里(一般都加在id上),id是自增的,索引不会有重复的时候出现

  6.1 事务四大特性

 

    原子性;

添加表字段的唯一索引
create unique index 索引名 on 表名(字段名)
alter table 表名 add unique 索引名(字段名)

    一致性;

在创建表的时候也可以进行添加
create table t2(
id int(10) unsigned auto_increment primary key,
name varchar(255), unique 索引名(字段名)
);

    隔离性;

删除唯一索引
drop index 索引名 on 表名

    持久性。

 

  6.2 事务隔离级别

##主键索引(primary key)
主键索引是关系数据库中最常见的索引类型,主要作用是确定数据表里一条特定的数据记录的位置。
我们可以在字段后添加PRIMARY KEY来对字段设置为主键索引。

    赃读:一个事务A读取另一个事务B未提交的数据;

注意:
1.最好为每张表指定一个主键,但不是必须指定。
2.一个表只能指定一个主键,而且主键的值不能为空
3.主键可以有多个候选索引(例如NOT NULL,AUTO_INCREMENT)

    不可重复读:一个事务A读取另一个事务B提交后的数据(update);

添加表字段的主键索引
alter table 表名 add primary key (字段名)
添加自增
alter table 表名 modify id int(4) auto_increment
删除主键索引
如果字段有了auto_increment 和 primary key的时候,需要删除主键的话,
先删除自增,然后再删除主键
删除自增
alter table 表名 change 字段名 字段名 类名
删除主键
alter table 表名 drop primary key

    虚读(幻读):一个事务A读取另一个事务B插入的数据(insert),前后不一致。

##全文索引(fulltext)

    以上情况均为事务A已开启,但未提交时发生!

全文索引在MySQL中是一个FULLTEXT类型索引,但FULLTEXT索引只能用于MyISAM表,
并且只可以在CHAR、VARCHAR或TEXT类型的列上创建,也允许创建在一个或多个数据列上。

    四个级别:

添加表字段的全文索引
alter table 表名 add fulltext 索引名(字段名)
删除全文索引
drop index (索引名) on 表名
alter table 表名 drop index 索引名

    1* read uncommitted :赃读,不可重复读,虚读都有可能发生;

 

    2* read commited :避免赃读。不可重复读,虚读都有可能发生;

注意:如果在创建索引的时候,不添加索引名的话 默认会把字段名当做索引名

    4* repeatable read :避免赃读,不可重复读。虚读有可能发生;

 

    8* serializable :避免赃读,不可重复读、虚读;

27.表的存储引擎
存储引擎: 是MySQL的一个特性之一,用户可以根据应用的需要选择如何存储

    级别越高,安全性越高,性能越差!

MySQL支持MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV、MEMORY等多种数据表引擎,在创建一个新MySQL数据表时,可以为它设置一个引擎类型。

   6.3 查看和设置事务级别

MyISAM和InnoDB两种表类型最为重要:

    查看当前事务隔离级别:select @@tx_isolation;  //dos命令

1.MyISAM数据表类型的特点是成熟、稳定和易于管理。
2.MyISAM表类型会产生碎片空间,要经常使用OPTIMIZE TABLE命令去清理表空间
3.MyISAM不支持事务处理,InnoDB支持
4.MyISAM不支持外键,InnoDB支持
5.MyISAM表类型的数据表效率更高
6.MyISAM表类型的数据表会产生三个文件
---.frm (表结构)
---.myd (表数据)
---.myi (表索引)
InnoDB表类型表默认只会产生两个文件
---.frm (表结构)
---.ibd (表数据+表索引)

    设置事务隔离级别:set transaction isolation level 四个级别之一;  //dos命令

7.MyISAM表,其优势就是访问的速度快。对事务没有完整性的要求或以select、insert为主的通常使用MyISAM表

    设置隔离级别,必须在开启事务之前!

8.InnoDB表:会占用更多的磁盘空间

    

锁机制:MyISAM 表锁:开销小,加锁快,发生冲突的概率高。
InnoDB 行锁:开销大,加锁慢,发生冲突的概率低。

    

9.默认是InnoDB引擎
数据存储在 innodb_data_home_dir选项所选的文件名的目录里

 

查看默认的引擎

show variables like 'default_storage_engine';

查看支持的引擎

show engines

查看当前库里面所有的表引擎

show table status from 库名

修改表引擎

alter table 表名 engine = 新的表引擎

ubuntu下
//mysql配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

//重启
sudo /etc/init.d/mysqld restart

 

编辑:数据库 本文来源:1.数据库系统(database system),  //创建一个数

关键词: