《MysqL必读MysqL 设计和命令行模式下建立详解》要点:
本文介绍了MysqL必读MysqL 设计和命令行模式下建立详解,希望对您有用。如果有疑问,可以联系我们。
MysqL实例MysqL 设计和命令行模式下建立详解
MysqL实例系列文章:
MysqL实例MysqL 设计和命令行模式下建立详解
MysqL实例C++利用MysqL API连接和 *** 作数据库实例详解
MysqL实例1.数据表的设计
MysqL实例MysqL数据库管理系统(DBMS)中,包含的MysqL中定义数据字段的类型对你数据库的优化是非常重要的.MysqL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型.
MysqL实例下面以大学熟悉的学生选课管理系统中用到的数据库为例,来设计相应的数据表.主要有三张表:学生表,课程表和选课表.
MysqL实例学生表设计:
字段(FIEld) | 类型(Type) | 可空(Null) | 键(Key) | 默认值(Default) | 其他(Extra) |
---|---|---|---|---|---|
学号(studentNo) | VARCHAR(12) | N | PRI | NulL | |
姓名(name) | VARCHAR(12) | N | N | NulL | |
学院(school) | VARCHAR(12) | N | N | NulL | |
年级(grade) | VARCHAR(12) | N | N | NulL | |
专业(major) | VARCHAR(12) | N | N | NulL | |
性别(gender) | Boolean | N | N | NulL |
MysqL实例课程表设计:
字段(FIEld) | 类型(Type) | 可空(Null) | 键(Key) | 默认值(Default) | 其他(Extra) |
---|---|---|---|---|---|
课程号(courseNo) | VARCHAR(10) | N | PRI | NulL | |
课程名(coursename) | VARCHAR(10) | N | N | NulL | |
课时(hour) | tinyint Unsigned | N | N | NulL | |
课程学分(credit) | tinyint Unsigned | N | N | 2 |
MysqL实例选课表设计:
字段(FIEld) | 类型(Type) | 可空(Null) | 键(Key) | 默认值(Default) | 其他(Extra) |
---|---|---|---|---|---|
编号(ID) | INT Unsigned | N | PRI | NulL | auto_increment |
学号(studentNo) | VARCHAR(12) | N | Mul | NulL | |
课程号(courseNo) | VARCHAR(10) | N | Mul | NulL | |
选课时间(time) | TIMESTAMP | N | N | CURRENT_TIMESTAMP |
MysqL实例对于上面三张数据表的设计,你会发现:
MysqL实例(1)MysqL在为数据定义字符串(字符)类型时,需要在类型名称的后面的小括号内指明最长字符数,即Typename(M),这里的M指的是字符数,而不是数据占用的字节数.例如varchar(12),则表述存储的字符数不能超过12,超过12则截断,小于12个字符则以实际占用的存储空间来存储,这样就节省了存储空间.
MysqL实例(2)在对选课表的设计时,我们添加外键约束,可以使得两张表关联,保证数据的一致性和实现一些级联 *** 作.
MysqL实例(3)MysqL中有三种Key和一个Index: Primary Key(主键),Unique Key(唯一键),Foreign Key(外键)和 Index(索引).
MysqL实例四者的区别如下:
MysqL实例定义:
MysqL实例主键(Primary Key):唯一标识一条记录,不能有重复,不允许为空.
外键(Foreign Key):表的外键是另一表的主键,外键可以有重复,可以是空值.
唯一键( Unique Key):唯一标识一条记录,可以为空.
索引(Index):该字段可以有重复值记录,可以有空值,如果是唯一索引,那么就不可以有重复的记录,可以有空值.
MysqL实例作用:
MysqL实例主键:用来保证数据完整性.
外键:用来和其他表建立联系,以保证数据的一致性和级联 *** 作.
唯一键:用来用防止数据插入的时候重复.
索引:是提高查询排序的速度.
MysqL实例个数:
MysqL实例主键:一个表只能有一个列是主键.
外键:一个表可以有多个列是外键.
唯一键:一个表可以有多个列是唯一键.
索引:一个表可以有多个列是索引.
MysqL实例从中可以看出,索引和唯一键很相似,二者的区别在于作用不同,索引用于提高查询速度,唯一键用于唯一约束.当然如果建立的索引是唯一索引的话,也可以起到唯一约束的作用.在MysqL具体实现上,索引需要建立数据结构,需要额外的磁盘空间来存储索引,而键(主键,外键和唯一键)都是逻辑层面的实现和约束,二者还是有着本质的区别.
MysqL实例还有就是MysqL的索引包括:普通索引(Index)、唯一索引(UNIQUE INDEX)、全文索引(FulLTEXT INDEX)、组合索引.这里就不要把唯一键和唯一索引弄混淆了!也不要把索引和其它的三种键弄混淆了.
MysqL实例还有一点需要注意的是,虽然键(key)和索引(index)有着本质的区别,但是当我们在建立主键或者唯一键的时候,也就建立了索引,MysqL和Oracle都是这么做的,要是不明白这一点,很容易把索引和主键和唯一键弄混淆.
MysqL实例唯一键可以起到唯一约束的作用,当然主键也可以起到唯一约束的作用.当然我们可以不建立唯一键和主键,直接为指定的数据表的列添加唯一约束.唯一约束保证指定列的值不能重复.
MysqL实例所以,关于上面的概念,大家不要咬文嚼字,而是根据功能去理解每一种KEY的作用,在什么场合需要去使用它.
MysqL实例比如需要主键约束的时候,我们就可以对某一列建立主键;
MysqL实例需要对某一列或者多个列进行唯一约束的时候,我们就建立唯一键或者唯一约束;
需要加快查询速度的时候,我们就建立相应类型的索引.
MysqL实例关于四者的理解,上未参考到权威的资料,请读者保持怀疑的态度接受.
MysqL实例2.数据库的建立
MysqL实例在安装完MysqL之后,我们要建立自己的数据库.下面将详细地一步一步演示如何创建上面设计好的数据库.
在MysqL模式下,使用status命令可以查看MysqL版本,本人使用的MysqL版本:5.6.30 MysqL Community Server (GPL).
MysqL实例关于MysqL大小写问题,MySQL命令是不区分大小写的.数据表的表名在windows下不分,linux下分.数据表的字段名在windows和linux下都不分.
MysqL实例(1)登录MysqL DBMS
MysqL实例linux命令行中输入如下命令:
MysqL实例MysqL -hlocalhost -uroot -p123456
@H_463_419@MysqL实例说明:依次指明登录MysqL的主机地址,用户和用户密码.
MysqL实例(2)使用show查看当前MysqL服务器上存在什么数据库
MysqL实例show databases;
@H_463_419@MysqL实例
MysqL实例说明:在进入MysqL模式下,使用MySQL命令时,每条语句要以分号结束.但是use [Databasename]却不用,可能是MysqL的一个小BUG.类似于quit和exit退出MysqL的命令,不需要一个分号.(如果你喜欢,你可以用一个分号终止这样的语句).
MysqL实例(3)创建数据库
MysqL实例MysqL> CREATE DATABASE StudentCourse;
@H_463_419@MysqL实例(4)使用use语句访问数据库
MysqL实例MysqL>use StudentCourse;
@H_463_419@MysqL实例(5)创建数据表student
MysqL实例MysqL> create table student( studentNo varchar(12) not null,name varchar(12) not null,school varchar(12) not null,grade varchar(12) not null,major varchar(12) not null,gender boolean not null,primary key(studentNo))engine=MyISAM default charset=utf8;
@H_463_419@MysqL实例观察上面的建表语句,需注意以下几点:
MysqL实例(a)其中,布尔类型boolean在MysqL是以类型tinyint(1)来实现,这里的1指代的是数据显示时最短长度.
实际上tinyint(1)是可以插入-128到127之间的其它数值.因为MysqL数据库中以 :数据类型(m)来定义数据类型,其中 数字m在不同的数据类型中表示含义是不同的. 整型数系统已经限制了取值范围,tinyint占一个字节、int占4个字节.所以整型数后面的m不是表示的数据长度,而是表示数据在显示时显示的最小长度(长度为字符数).
MysqL实例tinyint(1) 这里的1表示的是最短显示一个字符.tinyint(2) 这里的2表示的是最短显示两个字符,但这里光设置m是没有意义的,你还需要指定当数据少于长度m时用什么来填充,比如zerofill(表示有0填充).设置tinyint(2) zerofill你插入1时他会显示01.设置tinyint(4) zerofill你插1时他会显示0001.
MysqL实例(b)还要注意一点是,使用engine可指明引擎,如果省略了engine语句,则使用默认的引擎(MYISAM).MysqL支持三个引擎:ISAM、MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.
MysqL实例(c)设置default charset指明MysqL数据表的编码方式,不显示指定编码方式的话,数据表的默认编码方式一般是latin1.也可以通过如下命令查看数据表的编码方式:
MysqL实例show create table student;
@H_463_419@MysqL实例如果需要转换数据表的编码格式,使用如下命令:
MysqL实例alter table student convert to character set utf8;
@H_463_419@MysqL实例如果想查看当前数据库的编码格式:
MysqL实例MysqL>status;#或者show variables like 'character%' ;
@H_463_419@MysqL实例为了验证所建立的数据表是否是按照期望的方式创建的,使用如下命令:
MysqL实例#查看表中的列SHOW ColUMNS FROM student;#或者直接使用describedescribe student;
@H_463_419@MysqL实例
MysqL实例(6)创建数据表course
MysqL实例MysqL> create table course( studentNo varchar(12) not null primary key,courseNo varchar(10) not null,hour tinyint unsigned not null,credit tinyint unsigned not null default 2 )engine=MYISAM default charset=utf8;
@H_463_419@MysqL实例同样可以使用describe查看表信息:
MysqL实例(7)创建数据表courseSelection
MysqL实例MysqL> create table courseSelection( ID int unsigned not null auto_increment primary key,studentNo varchar(12) not null,time timestamp not null default CURRENT_TIMESTAMP,FOREIGN KEY(studentNo) REFERENCES student(ISBN) ON UPDATE CASCADE ON DELETE CASCADE,FOREIGN KEY(courseNo) REFERENCES course(courseNo) ON UPDATE CASCADE ON DELETE CASCADE)engine=MYISAM default charset=utf8 auto_INCREMENT=0;
@H_463_419@MysqL实例查看表信息:
MysqL实例(8)其它关于数据库和数据表的 *** 作命令
MysqL实例删除数据库:
MysqL实例MysqL> DROP DATABASE 库名;
@H_463_419@MysqL实例删除数据表:
MysqL实例MysqL> DROP table 表名;
@H_463_419@MysqL实例将表中记录清空:
MysqL实例MysqL> DELETE FROM 表名;
@H_463_419@MysqL实例参考文献:
MysqL实例[1]http://www.runoob.com/MysqL/MysqL-data-types.HTML
[2]MysqL 查看、创建、更改 数据库和表
[3]PHP里tinyint(1)为什么还能插入99这个值?搜索
[4]MysqL引擎
[5]MysqL中的四种Key
[6]sql的主键和外键约束
[7]唯一索引和唯一约束有什么区别
MysqL实例感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
总结以上是内存溢出为你收集整理的Mysql必读MySQL 设计和命令行模式下建立详解全部内容,希望文章能够帮你解决Mysql必读MySQL 设计和命令行模式下建立详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)