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;#打开数据约束

(0)

相关推荐

  • MySQL创建带特殊字符的数据库名称方法示例

    前言 这篇文章抓哟讲解了关于如何实现在MySQL中创建带有特殊字符的数据库名称,这里的特殊字符包含:!@#$%^ 方法如下 使用反引号`将数据库名称包含住,反引号`(使用引号是不可以的)即在英文输入法状态下,按Esc键对应下方的键即可出来.当然在没有使用反引号`包含数据库名称的时候,若数据库名称含有特殊字符,则会报错. 例如,使用下面的创建命令是会报错的: mysql> CREATE DATABASE www.mafutian.net DEFAULT CHARSET UTF8; 1064 - E

  • MySQL创建和删除数据库的命令及相关PHP脚本的操作方法

    使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库. 实例 以下命令简单的演示了创建数据库的过程,数据名为 TUTORIALS: [root@host]# mysqladmin -u root -p create TUTORIALS Enter password:****** 以上命令执行成功后会创建 MySQL 数

  • 用命令创建MySQL数据库(de1)的方法

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1. 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户 名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码. 如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql> 2.连接到远程主机上的MYSQL.假设远程主机的IP为

  • mysql中数据库与数据表编码格式的查看、创建及修改

    一.查看数据库编码格式 mysql> show variables like 'character_set_database'; 二.查看数据表的编码格式 mysql> show create table <表名>; 三.创建数据库时指定数据库的字符集 mysql>create database <数据库名> character set utf8; 四.创建数据表时指定数据表的编码格式 create table tb_books ( name varchar(45

  • MySQL创建数据库的两种方法

    本文为大家分享了两种MySQL创建数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库. 实例 以下命令简单的演示了创建数据库的过程,数据名为 TUTORIALS: [root@host]# mysqladmin -u root -p create TUTORIALS

  • 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')

  • C# Dockpanel入门基础必看篇

    一.引用: 1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1(此处默认为主窗体). 2.引用->添加引用->浏览->weiFenLuo.winFormsUI.Docking.dll. 3.设置Form1窗体属性IsMdiContainer:True. 4.工具箱->右键->选择项->.net组件->浏览->weiFenLuo.winFormsUI.Docking.dll->在工具箱出现dockPanel. 5.将dockPan

  • MySQL入门(三) 数据库表的查询操作【重要】

    序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对于INNER JOIN(内连接).LEFT JOIN(左连接).RIGHT JOIN(右连接)等一些复杂查询. 通过本节的学习,可以让你知道这些基本的复杂查询是怎么实现的,但是建议还是需要多动手去敲,虽然理解了什么是内连接等,但是从理解到学会,是完全不一样的感觉. --WH 一.单表查询 1.1.查

  • MySQL入门(二) 数据库数据类型详解

    序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过今天的学习,已经解惑了.下面就跟着我的节奏去把这个拿下吧. ---WH 一.数据类型 MySQL的数据类型有大概可以分为5种,分别是 整数类型.浮点数类型和定点数类型.日期和时间类型.字符串类型.二进制类型.现在可以来看看你对这5种类型的熟悉程度,哪个看起来懵逼了,那就说明自己哪个不熟悉,不理解.

  • C# 异步多线程入门到精通之Thread篇

    上一篇:C# 异步多线程入门基础 下一篇:C# 异步多线程入门到精通之ThreadPool篇 Thread API 这里对 Thread 的一些常用 API 进行介绍,使用一些案例进行说明.由于 Thread 的不可控与效率问题,Thread 现在已经不常用了,这里介绍一些 API ,想更深入的同学可以继续研究研究. Instance 首先看 Thread 的构造函数,有 ThreadStart .ParameterizedThreadStart .maxStackSize 类型的参数,这三个常

  • MySQL数据库基础篇之入门基础命令小结

    本文实例讲述了MySQL数据库入门基础命令.分享给大家供大家参考,具体如下: 在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL. 在刚刚出炉的 2019 年3月份数据库流行度排行榜上,第一梯队的前三个数据库产品都获得了显著的加分增长. 其中 Oracle 上升了15.12分,MySQL上升了30.96分,SQL Server则上升了 7.79分.以下是前20

  • mysql入门之1小时学会MySQL基础

    MySQL入门 mySQL (关系型数据库管理系统) MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件. MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高

  • MySQL学习之数据库表五大约束详解小白篇

    目录 1.约束概念和分类 2.五大约束的添加和删除 2.1添加约束的六种方法 2.2三种删除约束的方式 2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2) 2.4对于创建约束的总结 2.5对于主键和唯一的区别 3.自增长列 3.1概念 3.2在创建表的时候添加主键约束,并且完成主键自增长的例子 3.3自增长的添加和删除 3.4设置自增长步长 1.约束概念和分类 1.1约束的概念: 对表中的数据进行限定,保证数据的正确性,有效性,完整性 1.2约束分类 1.主键约束(primary k

  • MySQL入门教程(五)之表的创建、修改和删除

    MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成. 表是DB存储数据的基本单位,一个表包含若干个字段或记录.表的操作包括创建.修改和删除. 1.创建表 创建表即在已存在的数据库中创立新表.在使用USE语句选择具体数据库后,可以使用它SQL语句创建表 其中,属性名指表中字段的名称,数据类型即对应字段的数据类型,完整性约束条件指

  • Oracle数据库创建用户与数据库备份小结(必看篇)

    前言:使用Oracle开发系统过程中,会涉及到数据库用户的建立,及给该用户分配权限.刚开始接触开发的时候,对这些操作是一种茫茫然的状态.后,经过积累,对这方面有了一定的认识,现总结一些,一则,巩固自身,也希望收到大家的指正:再则,希望能帮助疑惑的童鞋,实现人生的小价值,嘿嘿嘿. 创建用户以及授权代码: -- Create the user create user myName -- 创建用户 identified by myPwd --设置密码 default tablespace USERS

随机推荐