dbbull

修改数据库表结构

alter table 表名 执行动作;mysql安装教程

执行动作:

  • 添加新字段(add)
  • 删除已有字段(drop)
  • 修改字段类型(modify)
  • 修改字段名(change)

语法格式

添加新字段

add 添加新字段
add 字段名 类型(宽度);
add 字段名 类型(宽度) 约束条件 ;
add 字段名 类型(宽度) 约束条件 first;
add 字段名 类型(宽度) 约束条件 after 字段名;

eg:

alter  table  t1  add   class  char(7)  default "nsd1609" first,add  tel  char(11) ,add  sex  enum  ("boy","girl")  default  "boy" after  name;

删除字段

drop 删除字段
drop 字段名

eg:

alter table   t1  drop  name,drop  sex;

修改字段类型

modify 修改字段类型
不能与字段已经存储的数据冲突
modify 字段名 类型(宽度) 约束条件;

eg:

mysql> alter table   t1
    -> modify  
    -> sex  enum("boy","girl","no") not null  default  "no";

修改字段名

change 修改字段名
change 原字段名 新字段名 类型(宽度) 约束条件;

eg:

alter table  t1  change  tel  iphone char(11);

修改表名

alter table 原表名 rename [to] 新表名;

eg:

alter table  t1 rename t111;

mysql索引

概述

索引:相当于 "书的目录"

  • 索引的优点
    • 加快查询记录的速度.
  • 索引的缺点
    • 会减慢写的速度( insert update delete ).
    • 占用物理存储空间.

在表里建索引 设置在字段上

索引类型

  • 普通索引 index
  • 唯一索引 unique
  • 主键 primary key
  • 外键 foreign key
  • 全文索引 fulltext

使用索引

  • 查看
  • 创建
  • 使用规则
  • 删除

查看索引

  • desc 表名; ---> 显示结果中的Key列即是索引值
  • show index from 表名\G;
    Table: user
    Column_name: Host
    Key_name: PRIMARY //即是索引值
    Index_type: BTREE //共有三种:BTREE(二叉树),B+tree,hash
index普通索引的使用规则
  • 一个表中可以有多个INDEX字段
  • 字段的值允许有重复,且可以赋NULL值
  • 经常把做查询条件的字段设置为INDEX字段
  • INDEX字段的KEY标志是MUL
创建普通索引

1.在已有表里创建index字段
create index 索引名 on 表名(字段名);
create index sex on t111(sex);

2.建表时创建index字段
create table 表名 (
字段名列表,
index(字段名),index(字段名)
);

删除普通索引

drop index 索引名 on 表名;
drop index sex on t24;

primary key主键的使用规则
  • 一个表中只能有一个primary key字段
  • 对应的字段值不允许有重复,且不允许赋NULL值
  • 如果有多个字段都作为PRIMARY KEY,称为复合主键,必须一起创建。
  • 主键字段的KEY标志是PRI
  • 通常与 AUTO_INCREMENT 连用
  • 经常把表中能够唯一标识记录的字段设置为主键字段[记录编号字段]

建表时创建主键字段

create  table  t25( name  char(10), age   int(2), primary key(name));
create  table  t26( name  char(10) primary  key, age   int(2));

删除主键

alter table 表名 drop primary key;

在已有表里创建主键

alter table 表名 add primary key(字段名);

复合主键的使用

多个字段一起做主键是复合主键 必须一起创建。
字段的值不允许同时相同。

建表时创建:
create table t29(host char(10),db char(10),user char(10),primary key(host,db,user));

对已有的表进行添加:
alter table t29 add primary key(host,user,db);

通常和aUTO_INCREMENT 连用,实现字段值的字段增长
经常把表中能够唯一标识记录的字段设置为主键字段[记录编号字段]

唯一索引 unique
  • 字段的值可以为Null 但不可以重复
  • 一个表里可以有多个unique字段
  • 标志 UNI

一般使用于:姓名,身份证,考试证,护照,驾驶证

建表时创建:

create  table  t29(
name  char(10),
stu_id  char(9),
age int(2),
unique(stu_id)
);

在已有表里创建unique字段
create unique index 索引名 on 表名(字段名);
create unique index stu_id on t29(stu_id);

外键(foreign key)

功能:
让当前表某个字段的值,在另一个表某个字段值的范围内选择。

使用规则:

  • 表的存储引擎必须是innodb
  • 字段的数据类型要匹配
  • 被参考的字段必须是key 中的一种 (primary key)
create  table  jfb(
jfb_id   int(2) primary key auto_increment,
name  char(10),
pay   float(7,2)
)engine=innodb;

create table  bjb(
bjb_id  int(2),
name  char(10),
foreign  key(bjb_id)  references   jfb(jfb_id) on  update  cascade   on  delete cascade
)engine=innodb;

删除外键

show create table 表名;
alter table 表名 drop foreign key 外键名;
alter table bjb drop foreign key bjb_ibfk_1;

mysql存储引擎

概述

存储引擎:
表的处理器,是mysql数据库服务软件自动程序,不同处理器有不同的功能和数据存储方式。

基本操作

  • 查看数据库服务支持哪些存储引擎:
show  engines;
InnoDB DEFAULT
  • 修改mysql数据库服务默认使用的存储引擎:
vim  /etc/my.cnf
[mysqld]
default-storage-engine=myisam
service  mysql  restart
  • 建表时指定表使用的存储引擎

create table t31(name char(10))engine=memory;

  • 修改表使用的存储引擎

alter table 表名 engine=存储引擎名;
eg:
alter table t31 engine=innodb;

  • 查看表使用的存储引擎
    show create table 表名;

  • 工作中使用哪种存储引擎?

    • myisam
    • innodb
  • myisam的特点

    • 独享表空间
    • t1.frm 表结构
    • t1.MYD 表记录
    • t1.MYI 表索引
  • innodb的特点

    • 支持行级锁
    • 支持外键 、 事务 、事务回滚
    • 共享表空间
    • t3.frm 表结构
    • t3.ibd 表记录+表索引

事务

事务:一次sql操作从开始到结束的过程。

事务回滚:执行一次事务,只要执行过程中,任何一步执行失败,就恢复之前所有的sql操作。

事务日志文件记录对所有inondb存储引擎的表执行过的sql命令。

ibdata1 记录sql命令产生的数据信息

ib_logfile0----|
|---> 记录SQL 命令
ib_logfile1----|

锁机制

锁机制是为了解决客户端的并发访问冲突问题。

锁粒度: 表级锁 行级锁 页级锁

锁类型:

  • 读锁 (共享锁) select * from t1;
  • 写锁 (互斥锁 排它锁)

建表时如何决定表使用的存储引擎:

执行写操作多的表适合使用inondb存储引擎,这样并发访问大。

执行读操作多的表适合使用myisam存储引擎.

实例操作(前面基本描述的具体实现)

//进入mysql数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| game_db            |
| mysql              |
| performance_schema |
| test               |
| user_db            |
+--------------------+
6 rows in set (0.00 sec)

mysql> use user_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_user_db |
+-------------------+
| user_list         |
+-------------------+
1 row in set (0.00 sec)

mysql> desc user_list;
+-----------+-------------------------------------+------+-----+---------+----------------+
| Field     | Type                                | Null | Key | Default | Extra          |
+-----------+-------------------------------------+------+-----+---------+----------------+
| id        | int(10)                             | NO   | PRI | NULL    | auto_increment |
| u_name    | char(10)                            | NO   

分类:

技术点:

相关文章: