`

Mysql入门基础 数据库创建篇(转)

 
阅读更多

1.创建数据表---基础(高手跳过) 
正统方法:create [TEMPORARY] table 表名 [if not exists] 
(创建的列项定义) 
[表的选项] 
[分区的选项];#正统的创建方式,具体的参数,请参考mysql手册,在这里不做详细的解释,只说一些比较特别的。 
例: 

create table user(id int unsigned not null auto_increment, 
username char(15), 
sex enum('M','F') default 'M', 
userid varchar(20), 
PRIMARY KEY(id,userid), 
INDEX idx_user(userid), 
)engine='innodb' charset=utf8; 

 

 

复制数据库结构: 

create [temporary] table 表名 [if not exists] like 已存在的表名;//模仿已存在的表创建一个结构完全相同的表 
mysql>create table vip_user like user; 
mysql>create table vip_user select * from user where 0;//上例还可以这样做,仅复制结构 

 

 

复制并copy数据库

create [temporary] table 新表名 select * from 旧表名;#用户可以人为的指定后续select组合成需要的语句。 
create table dst_tbl( 
id int not null auto_increment, 
primary key(id) 
) select a,b,c from src_tbl; 

 

以此来创建各种各样的符合用户要求的数据库,这里只是做一个抛砖引玉。 
2.查看修改的数据表结构 

mysql> desc 数据表名;#查看数据表的结构 
mysql> show create table 数据表名\G #查看数据表的构成语句,\G和;的意义相同,只不过\G是纵向显示,这样看的更清楚。 
mysql> show table status like '数据表名'\G #查看数据表的状态 
mysql> show columns from 数据表名;#查看数据表的结构,同desc一样,不过使用这条语句后面加like '字段'可以只显示指定字段 

 

3. 更改变据库的结构 
我们首先创建一个表 
mysql> create table vip(id int null,username varchar(30)); 
修改表结构中的数据类型 

mysql>alter table vip modify id smallint default 1;#更改数据记录为1. 
mysql>#alter table vip modify id smallint auto_increment;#大家执行一下这句话会提示错误,因为mysql中要求自动增长的列设为主键 
mysql>alter table vip add primary(id);#设vip中的值的主键为id,执行这条语句后再执行上面的就没问题了。 
mysql>alter table vip modify username char(30) not null;#改变vip的username为char(30); 
mysql>alter table vip modify username mediumtext first; #改变vip中的username,并将它设在最前面字段,还有一个是after 字段,是指放在某字段后 
 

对已有表新增字段 
mysql> alter table vip add sex enum('M','F') default 'M' not null after id;#新增sex字段为enum类型,放在id的后面. 

对已有字段改名 
mysql>alter table vip change sex usersex tinyint default 0 not null after username;改名字段sex为usersex并改变类型和位置。 
注:仅alter中modify,change很相似,但是modify不能改名只能改结构,但change即可以改名,也可以改类型。 

删除字段 

mysql>alter table vip drop usersex;#删除 usersex字段,警告,所有的该字段数据都会丢失。

 

数据库改名 

mysql>alter table vip rename to vip_user;数据库进行改名。 
 

改变数据表引擎

mysql>alter table vip engine="MyISAM"; 

 

注意,修改数据结构是一个很危险的事,最好做好备份,以防不侧。 
还有部分的alter的语句和技巧我们将在以后涉及处一一到来..... 
4. 关于数据约束 
数据约束在mysql5中支持的越来越好了,但是现有的数据约束仅限于innodb,传说中mysql5.2也会支持对数据约束的支持(期待..) 
首先我们了解一下什么是数据约束,因为我们平常创建表中都可能会有互相关联的信息,而数据约束是将两个表进行关联的一种纽带。 
例如:两个表,一个usertype,一为userid,usertype中有一个关键字key为用户类型编号,userid表中也有一 user_key对应着usertype表中的 
1.首先我们要保证userid表中的所有值都在usertype中 
2.其次我们要保证usertype中的值key进行改变userid表中的user_key值也会变化。 
3.usertype中的值不能随意删除,除非userid表中不存在该usertype类型的值,如果要强制删除则会删除userid中的所有 usertype的值。 
如果没有数据约束,我们每次insert/update可能要用数条语句才能保证数据的正确完整性,如果使用数据约束则只需要在定义的时候进行一下处理,而不用担心太多。而且最重要的是使用数据约束能够很好的保证数据,业务的完整性。 
呵呵,说了这么多,还没有说数据约束的缺点:慢,使用数据约束要比不使用数据约束慢得多,而且用户每次插入数据或更改数据,数据库系统都会花一定的时间进行一定的检查.但是随着 mysql的日益成熟,这种速度会有着很大的改进。 
就个人而言,我觉得非商务、实时系统对数据业务完整性要求较高的情况下使用数据约束还是很有必要的。其它情况下就仁者见仁智者见智了。 

5.数据约束简明解析 
所以外键的定义必须必须满足以下三种情况: 
1.两个表必须是innodb表类型 
2.指定为外键的列必须进行索引 
3.两个表中关联的外键类型必须相符。 
我们先来看例子,在例子中进行学习: 
mysql> create table parent(id int null,primary key(id)) engine=innodb; #创建一个主表 
mysql> create table child(id int,parent_id int, 
foreign key(parent_id) 
references parent(id) on delete restrict on update cascade 
) engine=innodb; #创建一个从表,并约外键关键字为parent_id,建立之间的关联关系。 
mysql> insert into parent values(1),(2),(3);#对主表插入数据 
mysql> insert into child values(1,1),(1,2),(1,3);#对子表进行插入数据,对应不同的parent_id子child的id值均为1; 
mysql> #insert into child values(1,1),(1,2),(1,3),(1,4); #看一下这会发生什么?报错是吧?什么原因?大家想想 
说明:因为我们在创建语句的时候就约定了数据是进行外键关联的,而parent中不存在id值为4的主键,那么子键当然更新不了了。 
这时数据库中的值为: 
parent child 
id id parent_id 
1 1 1 
2 1 2 
3 1 3 
我们继续操作以体现外键关联表的作用 
mysql> update parent set id=4 where id=1;#改变parent的值看一下child的反应 
mysql> select * from parent; 
mysql> select * from child; 
这时数据库中的值为: 
parent child 
id id parent_id 
2 1 4 
3 1 2 
4 1 3 
通过以上的例子大家可以清楚的看到用户只是改变parent的值,而关联的child值会自动改变。我们继续
mysql> insert into child values(2,4),(3,4),(4,4);#为子表再添加一些其它的值。 
mysql> #delete from parent where id=4; #大家执行这条语句看一下有什么结果,错误吧?我们来分析一下提示错误 
我们回顾一下我们创建外键的说细情况和关键语句: 
foreign key(parent_id) #这句话的意思是指定对外关联键为本表的parent_id; 
references parent(id) on delete restrict on update cascade#这句话是则约束语句,references可以约束本数据库的外键即parend_id与 parent数据表的id子键对应,并约束了on delete,on update时的操作,mysql共有以下几种操作: 
(1) restrict、no action 表示如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 ,大家现在明白了吧?为什么我们执行delete from parent where id=4;时出现错误,因为子表(child)中还存在值. 
(2) set null 在父表上update/delete记录时,将子表上匹配记录的列设为null,但要注意子表的外键列不能为not null 
(3) cascade 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 
大家可以根据自己的需要设置不同的动作,例如,我们要在父表删除时,自动删除子表的关联值,则我们需进行设置: 
references parent(id) on delete cascade on update cascade,实验之前我们须要知道 
1.已经定义设置好的外键是无法再行更改的,必须要删除外键后再行创建(可能还有别的方法,哪位高手指点一下) 
mysql> show create table child/G #得到 constraint(约束)的名字 
说明:constraint是可以缺省的,用于指定约束的名字,如果不指定则系统会自动为它取名,例如我们可以这样: 
constraint fk_child_key 
foreign key(parent_id) 
references parent(id) on delete restrict on update cascade; 
这样我们就指定了这个约束的整体名称为fk_child_key,以后可以对这个进行操作了. 
mysql> alter table child drop foreign key fk_child_key;#删除约束 
mysql> alter table child add foreign key ('parent_id) 
references parent(id) on delete cascade 
on update cascade; 
mysql> show create table child/G #至此约束已更改,用户可以查看一下更改情况 

mysql>delete from parent where id=4;#我们再执行上面的那句,这时没错误了吧? 
mysql>select * from parent; 
mysql>select * from child; #我们可以看到现在与parent_id为4的全部删除。呵呵,以后都可以方便的使用了 
这时数据库中的值为: 
parent child 
id id parent_id 
2 1 2 
3 1 3 
6.数据约束 的额外说明 
如果定义了数据约束,则数据的插入或更改速度会很慢,特别是更改数据结构,插入数据时,效率低的可怕。 
当客户执行load data(载入数据,后续会介绍),alter table时建议使用以下命令,暂时关闭数据约束,等完成后再开启,这样速度至少可以提升20倍以上。 
mysql> set foreign_key_checks=0;#关闭数据约束 
mysql> load data infile '文件绝对地址' into table 表名;#从文本文件中载入大量数据 
mysql> set foreign_key_checks=1;#打开数据约束

分享到:
评论

相关推荐

    数据库MySQL入门.pdf

    MySQL入门讲义 MySQL是属于Oracle Corporation(甲骨文公司)推出的关系型数据库管理系统, MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。 MySQL最流行的关系型数据库...

    Mysql入门基础 数据库创建篇

    ### MySQL入门基础:数据库创建篇 对于初学者来说,了解如何使用MySQL进行基本操作是非常重要的。本篇文章将围绕“MySQL入门基础:数据库创建篇”这一主题展开,详细讲解数据库创建的基础知识,包括创建数据表、...

    MySQL数据库入门.rar

    这个"MySQL数据库入门"压缩包提供了一系列的学习资源,包括PPT、PDF文档和代码示例,帮助初学者快速掌握MySQL的基础知识。 首先,让我们从标题开始。"MySQL数据库入门"意味着这个教程将覆盖数据库的基础概念,如何...

    MySQL数据库基础实例教程(第2版)教学大纲.pdf

    《MySQL数据库基础实例教程(第2版)》是一门针对软件技术、移动互联等相关专业设计的专业必修课程,旨在培养学生对数据库应用系统的开发、管理和维护能力。课程通过项目模拟和职业体验式学习,使学生在理论与实践中...

    MySQL入门教程 数据库

    本入门教程将带你逐步了解MySQL的基础知识,包括安装配置、数据库与表的创建、数据操作以及简单的查询语句。 1. **MySQL安装与配置** 在开始学习MySQL之前,你需要在你的计算机上安装MySQL服务器。这通常涉及下载...

    《MySQL数据库入门》-黑马程序员 配套书籍资源 .zip

    总之,《MySQL数据库入门》的配套资源为学习者提供了丰富的学习素材,结合教材使用,可以确保全面、系统地掌握MySQL的基础知识和实际操作技巧。无论是初学者还是有一定基础的开发者,都能从中受益。通过这些资源,...

    MySQL入门很简单(数据库)

    4. **数据库创建与操作**:学会创建、查看、修改和删除数据库。使用CREATE DATABASE语句创建数据库,而DROP DATABASE语句用于删除。 5. **表的创建与操作**:在数据库中创建表,定义列名、数据类型和约束,如NOT ...

    完整精品数据库课件 MySQL从入门到精通 第01章 初始MySQL(共19页).ppt

    总的来说,这个“MySQL从入门到精通”的课程内容详尽,涵盖了从数据库基础知识到高级应用的所有方面,是学习MySQL的理想资源。通过系统学习,你可以掌握从安装配置到性能优化,从基本操作到复杂查询,从单一用户管理...

    mysql数据库基础全部课件

    本课件"mysql数据库基础全部课件"旨在为初学者提供一个全面且实用的学习资源,帮助大家快速掌握MySQL的基础知识。 一、MySQL概述 1. MySQL的起源与发展:了解MySQL的诞生背景,发展历程以及其在当前互联网环境中的...

    MySQL入门+进阶资源合集.pdf

    ### MySQL入门+进阶资源合集 #### 一、MySQL基础知识与入门 ##### 1.1 MySQL基础概念 - **数据库(Database)**:是用于存储数据的逻辑容器,它能够高效地管理和组织数据。 - **表(Table)**:是数据库中用来存储...

    MySQL数据库入门到高级笔记快速学习pdf版本

    这份"MySQL数据库入门到高级笔记快速学习pdf版本"提供了从基础到高级的全面教程,适合不同水平的学习者。以下将详细解析其中涉及的主要知识点: 1. **基本操作**: - **启动与关闭MySQL服务**:可以通过`...

    MySQL数据库应用从入门到精通_第2版

    本书《MySQL数据库应用从入门到精通_第2版》旨在帮助读者从零基础开始,逐步掌握MySQL的使用技巧和高级功能,从而实现数据库管理与开发的精通。 一、MySQL基础知识 在入门阶段,首先会介绍MySQL的安装与配置,包括...

    MySQL数据库应用从入门到精通 第2版

    通过阅读《MySQL数据库应用从入门到精通 第2版》,你将全面了解MySQL的基础知识,掌握基本的SQL操作,以及如何在实际项目中应用MySQL。随着实践的深入,你将能够熟练地管理数据库,优化查询,构建稳定、高效的数据库...

    超详细的MySQL基础入门教程 从0讲到数据库操作 共22页.pdf

    6.2 创建一个数据库 abccs 9 6.3 选择你所创建的数据库 9 6.4 创建一个数据库表 9 6.5 显示表的结构 10 6.6 往表中加入记录 11 6.7 用文本方式将数据装入一个数据库表 11 7 检索数据 12 7.1 从数据库表中检索信息 12...

    MySQL基础PDF版

    本篇主要介绍MySQL的基础知识,涵盖数据库概述、数据操作语言、数据类型以及数据操作。 1. **数据库概述** - **什么是数据库**:数据库(Database,简称DB)是长期存储在计算机内,有组织、可共享的大量数据集合,...

    mysql入门总结Java数据库

    ### MySQL入门总结与Java数据库应用 #### MySQL基本操作与命令详解 MySQL作为一款广泛使用的开源关系型数据库管理系统,其在数据存储、管理及查询方面提供了丰富的功能与命令。以下是对给定文件中提及的一些关键...

    MySQL数据库入门(光盘)Lesson 01.rar

    这篇教程基于清华大学出版的《MySQL数据库入门》一书,由传智播客高教产品研发部编著,旨在帮助初学者理解并掌握MySQL的基础知识。 在"Lesson 01"中,我们将探讨以下几个关键知识点: 1. **MySQL概述**:MySQL是一...

    MySQL数据库入门(光盘)Lesson 03.rar

    总的来说,"MySQL数据库入门(光盘)Lesson 03.rar"涵盖了MySQL数据库基础操作的关键内容,是初学者踏入数据库世界的良好起点。通过学习这一章节,读者将能够独立完成数据库的安装、配置,理解基本的SQL语法,并具备...

    Mysql数据库基础入门视频及xmind笔记

    MySQL数据库是世界上最流行的开源关系型数据库...总之,"Mysql数据库基础入门视频及xmind笔记"是一个全面的初学者资源,通过系统学习,你可以建立起对MySQL的坚实基础,为未来更深入的数据库开发和管理打下坚实的基础。

Global site tag (gtag.js) - Google Analytics