文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MySQL数据库和表(续)

MySQL数据库和表(续)

时间:2009-07-06  来源:xiaolg2008

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cliguang%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style> </style>

声明:以下内容是读MySQL : The Complete Reference的笔记。

1.       删除外键

alter table table-name drop foreign key key-id

删除外键时需要查看外键名,可以用show create table table-name来查看外键名,如

show create table employees;

CREATE TABLE `employees` (

`id` smallint(6) NOT NULL,

       `name` char(255) NOT NULL,

       `fk_department` int(4) NOT NULL,

       PRIMARY KEY  (`id`),

       KEY `fk_department` (`fk_department`),

       CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`fk_department`) REFERENCES `department` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

可以看到外键是employees_ibfk_1,删除该外键

alter table employees drop foreign key employees_ibfk_1;

2.       级联

cascade 删除包含与已删除键值有参照关系的所有记录

set null 修改包含与已删除键值有参照关系的所有记录,使用null代替,只能用于已标记为not null的字段

restrict 拒绝删除要求,直到使用删除键值的辅助表被主动删除,并且没有参照时(这是默认设置,也是最安全设置)

no action 什么也不做

foreign key fk_department references department(id) on delete cascade

  意思是在删除department中的id时,如果在employees中有使用对应id的项,则相应的项会被删除

   如果设定为 on update cascade则当其相应的外键更新时该表也会相应的更新。

    foreign key (fk_cid) references categories (cid) on update cascade;

如果categories中的cid被更新的话,那么employees中的fk_cid也会被相应更新

3.       表类型

MYISAM表:支持大表文件,(大于4G),能在不同平台移植,

ISAM表:和MYISAM相似,不如MYISAM优化

HEAP表:内存中的表,能比较快的散列索引,但是遇到服务器崩溃,会导致数据丢失。

create TABLE heapex (id int(4), title varchar(24)) type=heap max_rows=10

指定max_rows来制定heap表的大小

BerkeleyDB表:type=BDB,具有事务特性,但是表一般比较大

InnoDB表:支持事务,性能优越,是MySQL中功能最完善的表类型

MERGE表:通过把多个MyISAM表组合到一个单独的表来创建的一种虚拟表,只有涉及到的表完全相同才能组合,字段类型或者索引的任何不同都会导致无法成功组合,Merge值允许进行select, delete和update操作。

4.       其他修饰符

auto_increment : 自增长

checksum:              是否存储表校验和布尔表示

comment:      表的描述性注释

max_rows:表中存储的最大行数

min_rows: 表中存储的最小行数

pack_keys:    是否压缩表索引的布尔表示

union: 映射到一个单独的merge表的表

data directory : 表数据文件的位置

index directory:表索引文件的位置

create table if not exists users(…..); 能防止创建重名表的错误

5.       复制表

create table xxx select * from yyy将yyy复制一份保存到xxx中

复制时可以增加条件,也可以选择部分字段进行复制

CREATE TABLE art SELECT aid, aname FROM articles WHERE fk_cid = 3

将articles中fk_cid为3的id和name复制为表art

可以用不成立的where条件来复制结构

create table art select * from articles where aid = 99(假设articles中没有aid=99的数据

但是:复制表结构时不会复制主键和外键,这些需要再添加

但是可以用如下的方法来复制表结构,这样表和源表结构一致。

create table art like articles 这样创建的art表结构和articles完全一致

复制时可以为表添加新的字段,如下

create table art (author varchar(25), year date) select aid, aname from articles

为art的字段分别为aid, aname, author,year

6.       临时表

MySQL允许创建临时表,这种表只在一次回话之间存在,如果客户退出MySQL再登陆时就消失了。

create temporary table session_key (skey int not null primary key);

创建了临时表session_key,这个表示临时存在的,而且用show tables不能列出该表

7.       修改表

alter table table-name (action field-definition, action field-definition, …);

actionàadd, drop, alter, change

给表改名

alter table mymembers rename memberslist;

alter table mymembers rename to memberslist;

rname table mymembers to memberslist;

增加字段

alter table mymembers add column email varchar(100) not null;

更改字段

alter table mymembers change mid id int(4) not null auto_increment;

修改字段

alter table mymembers modify email varchar(100) not null unique;

change和modify的区别:change要写明新旧两个字段名,而modify只是改字段属性,而不能更改字段名。

删除字段

alter table mymembers drop email;

可以用关键字after和first来控制增加字段的位置

alter table mymember add column status int(1) after id;

alter table mymember modify status int(1) not null after memail;

alter table mymember modify status int(1) not null first;

可以用set default和drop default来为字段设定和取消默认值

alter table mymember alter status set default 0;

alter table mymember alter status drop default;

如果要把含有重复值的字段更改为unique,则会违反约束,使用ignore可以忽略这种错误,删除重复的值

alter ignore table mymember modify name varchar(20) not null unique;

但是这样会删除重复name重复的行,并只保留一行

更改表类型

alter table mymember type=innodb;

为表增加索引:

alter table user add index uname (name);

alter table user drop index uname;

8.       删除表

drop table table-name;

drop table tb;

drop table if exists tb;

9.       获取数据库和表信息

show databases; 获取所有的数据库列表

show tables; 列出数据库中所有表,要求先指定表。

show tables from main; 获取main库中所有表列表

describe users; 获取users的描述

show index from users; 获取users中的索引

show table status from main; 获取main库中表的状态

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载