`

mySQL学习入门教程——2.创建表

 
阅读更多

二、创建表

 

一、创建数据表的SQL语句模型(弱类型)
CREATE TABLE [IF NOT EXISTS] 表名称(
字段名1 列的类型[属性][索引],
字段名2 列的类型[属性][索引],

字段名n列的类型[属性][索引],
)[表属性][表字符集];
【表名称,字段名需要自己来命名】
【SQL语句并不区分大小写,但是一个文件名:在Windows下不区分大小写,但是在 Linux/UNIX下是区分大小写的】
【命名规则:

  1、有意义(英文,英文组合或英文缩写)
  2、自己定的名称最好小写。
  3、SQL语句最好大写。

1、 CREATE TABLE users(
id INT,
name CHAR(32)
);
2、 SHOW TABLES;
3、 DESC users;
4、 SELECT * FROM users;

二、数据值与列类型
都以空间大小来细分,能够存下即可!

1、数值型
整型(整数):
非常小整数型 1字节 -128~127 0~255(无符号) TINYINIT
较小整数型 2字节 -32768~32767 SMALLINIT
中等大小整数型 3字节 0~16777215 MEDIUMIINT
标准整数型 4字节 -2147483648~2147483647 INT
大整数型 8字节 BIGINT
【可以添加属性:UNSIGNED】
浮点型(小数):
FLOAT(M,N) 4字节 【长度M,保留小数点后N位】
DOUBLE(M,N) 8字节 【五舍六入】
DECIMAL(M,N) M+2字节 【定点数,以字符串形式存储数据, 更精确的保存数据,但是效率会有所折扣。】【四舍五入】
【浮点数会存在误差,因此在对数字敏感的时候,需要用定点数来存储!】
3、字符型
MySQL支持以单引号与双引号表示字符串类型。
如“MySQL”与 'MySQL'相同
char(M) 最大255 固定长度字符串
varchar(M) 最大255 可变长度字符串
char(4) varchar(4)// 永远比字符多一个字节
'' 4 '' 1字节
'a' 4 'a' 2字节
'abcd' 4 'abcd' 5字节
'abcdefg' 4 'abcdefgh' 5字节

char类型会截取尾部的空格;
示例: CREATE TABLE IF NOT EXISTS tab(v varchar(4),c char(4));
INSERT INTO tab(v,c) VALUES(“ab ”,”ab ”);
SELECT CONCAT(v,”#”),CONCAT(c,”#”) FROM tab;

最佳实践:
固定长度,推荐使用char类型(可能会浪费一定空间)。
可变长度,推荐使用varchar类型(可能会付出一些性能损耗)

text 文本数据:文章,日志 长度:2^16-1
MEDIUMTEXT
LONGTEXT

blob 二进制数据:照片,电影 长度:2^16-1
MEDIUMBLOB
LONGBLOB
【虽然没法通过SQL语句将照片,电影,压缩包等二进制文件插入到数据库中, 但是我们可以通过C++/Java等编程语言将二进制文件读成二进制数据流,然 后保存到数据库中】
ENUM 枚举 1~2字节
ENUM(“one”,”two”,”three”,”four”)~65535
一次只能有一个值

SET集合 1,2,3,4,8字节
SET(“one”,”two”,”three”,”four”)~64
一次可以有多个值,用“,”隔开。
4、日期型
DATE YYYY-MM-DD //如果位数充足,可以不用加‘-’
TIME hh:mm:ss //位数充足,可以忽略‘:’,位数不足,从后面截取
DATETIME YYYY-MM-DDhh:mm:ss
TIMESTAMP YYYYMMDDhhmmss //位数不足时,不可忽略前导0
YEAR YYYY

【创建数据表时,最好不要使用这些时间值,最好使用C++/Java等编程语言中的整数来保存 时间,这样更方便计算,如C++中的int,PHP中时间戳1970-1-10:0:0】

 

三、数据字段属性
1、unsigned【无符号】
可以让空间增加一倍 比如可以让-128~127增加到0~255
注意:只能用在数值型字段


2、zerofill【前导零】
e.g. create table if not exists t2(num int(5) zerofill,price float(7,2) zerofill,name varchar(10));
注意:只能用在数值型字段,自动加上无符号属性


3、auto_increment【自增】 #auto自动;increment增量,增加
当插入值为:NULL,0,留空时,会自动+1;当插入已经存在的值时,则会报错
注意:只能用于整数,字段值不允许重复(需要结合其他属性实现,如:primary key) #primary主要的;初级的,基本的。
e.g. create table if not exists t3(id int auto_increment primary key,namechar(10));
insert into t3(id,name) values(null,”xiaofang”); #可以连续插入n次,null可以换成0
insert into t3(name) values(“xiaofang”);
插入时,会按照最大的数加1的顺序插入
e.g. delete from t3 where id >1 and id <9;
然后按照前面的语句插入
select * from t3 order by id;
delete from t3;
insert into t3(name) values(“xiaofang”); # * 5
select * from t3;
insert into t3(id,name) values(100,”ashun”);
insert into t3(name) values(“jichang”) # * 5
select * from t3 order by id;
最佳实践:每个表最好都设置一个ID字段,设置为自增长属性,auto_increment


4、NULL和NOT NULL
NULL:默认是空
建议:在创建表时,每个字段都不要插入空值,因为NULL值在转换为其他程序语言时存在很多不确定因素。
NOT NULL:非空
e.g. create table if not exists t4(id int not null,name varchar(10) notnull,price double(7,2) not null) ;
5、default【缺省值】
e.g. create table if not exists t5(id int not null default 0,name varchar(10) not null default “NULL”,price double(7,2) not null default 0.00);


6、综合
createtable users(
id int unsigned not null auto_increment primary key,
name varchar(30) not null default “”,
height double(10,2) not null default 1.00,
age int unsigned not null default 1,
sex varchar(5) not null default ”man”

);


四、创建索引
1、主键索引【primarykey】 #duplicate复制,使加倍 entry进入,侵入
作用:确定数据库表里一条特定数据记录的位置,一个表只能有一个主键,并且主键的值不能为空。
建议:最好为每一个数据表定义一个主键!
e.g. 1)create table t7(id int not null auto_increment primary key,name varchar(10));
2) create table t7(
id int not null auto_increment,
name varchar(10) not null '',
primary key(id)

); #在最后指定主键索引


2、唯一索引【unique】 #unique唯一的,独一无二的
都可以防止创建重复的值,但是,每个表可以有多个唯一索引
create table if not exists users(id int not null auto_increment,name varchar(30) not null default '' unique,age int,primary key(id));


3、常规索引【index/key】
是最重要的技术,可以提升数据库的性能,是数据库优化最先考虑的方面。索引可以提高查找的速度,但是会减慢插入,删除,修改的速度
和表一样是独立的数据对象,可以在创建表时使用,也可单独使用
单独使用时:createindex ind1 on users(name,age);
drop index ind1 on users; #删除索引
创建时使用:

createtable carts(
id int not null auto_increment,
uid int not null,
sid int not null,
primary key(id),
key cuid(uid),
index csid(sid)

);


4、全文索引
fulltext类型索引,只能MyISAM表类型上使用,只有在varchar,char,text上使用。也可以在多个数据列上使用。
create table books(
id int not null auto_increment,
bookname varchar(30) not null unique,
price double,
detail text not null,
full text(detail),
index ind(bookname),
primary key(id));


原始查询:select * from books where bookname like '%C++%';
现在查询:select bookname,price from books where match(detail)against('C++');
select match(detail) against('C++') from books; #match 匹配;against倚,靠;

//MATCH 相当于要找的列, 而  AGAINST 就是要找的内容。
可以明显的查询速度!

 

五、数据表类型及存储位置
1、MySQL与大多数数据库不同,MySQL有一个存储引擎概念。MySQL可以针对不同的存储需求选择不同的存储引擎。
2、 show engines; #查看MySQL所支持的存储引擎storage engine
3、 show variables like 'table_type'; #查看默认数据表类型
MyISAM和InnoDB最常用的存储引擎【表类型】
4、指定表类型【使用哪一个存储引擎】:
create table ...() engine = InnoDB;
注意:在一个数据库中可以在创建数据表时指定不同的表类型,即同一个库中可以有多个不同表类型的数据表存在


5、不同引擎的特点:
1)MyISAM表类型:
成熟稳定,易于管理,使用一种表格锁定的机制,需要经常使用“optimizetable 表名”来恢复机制所浪费的空间。
强调可以快速读取操作。但是也有一些功能不支持。
2)InnoDB表类型:
支持一些MyISAM所不支持的功能
缺点:占用空间大,不支持全文索引
对比:

 
六、MySQL默认字符集
1、MySQL支持的数据编码
ASCII码 #7个字符存储
ISO-8859-1/latin1字符集 #西欧字符集,经常被程序员转码用,8位编码
gb2312-80 #不推荐
...
GBK【95年】 #2字节,可以用,但是不推荐,双字节编码
GB18030【2000年发布】#数据库支持比较少见
UTF-32 #4字节,不常用
USC-2 #2字节,Windows2000内部使用
UTF-16 #2/4字节编码,JAVA,WindowsXP,WindowsNT内部使用
UTF-8 #1~4字节编码,Unicode是互联网与UNIX/Linux与MySQL服务器广泛支持的字符集,强烈推荐
e.g.

GBK  2字节:namevarchar(12) 6个汉字
UTF-8  3字节:namevarchar(12) 4个汉字


2、MySQL服务器,数据库,数据表,字段都可以指定不同的字符集,用“showcharacter set;”可用于查看MySQL支持的所有字符集
注意:数据库中UTF-8在使用时为utf8


3、MySQL的字符集包括 #character字符
字符集【charset】:用来定义MySQL字符串的存储方式
校对规则【collation】:用来定义MySQL字符串的比较方式
是一对多的关系:1个字符集可以对应多个校对规则
show collation like 'gbk%'; #可用来查看gbk所对应的校对规则
show collation; #可用来查看所有的校对规则,以ci结尾,表示大小写不敏感,以cs结尾,大小写敏感,以bin结尾表示以二进制比较
show variables like 'character_set_server'; #查看服务器端字符集
show variables like 'collation_server'; #查看服务器段校对规则


4、指定默认字符集与校对规则
create database xsdemo default character gbk collategbk_chinese_ci; #指定数据库默认字符集
create table t1(id int not null auto_increment primary key)engine=myisam default character set gbk collategbk_chinese_ci; #制定数据表的字符集


5、客户端与服务器交互时
character_set_client #客户端字符集
character_set_connection #连接字符集
character_set_result #返回结果字符集
通常情况下这三个字符集应该是相同的,才能使得数据传输是相同的,使用“setnames 字符集”可以同时修改这三个的值。
alterdatabase character set utf8; #修改数据库的字符集,alter修改,更改
altertable t1 character set utf8; #修改数据表的字符集
服务器的字符集就只能改配置文件了


6、备份数据库
mysqldump -u root -p --default-character-set=gbk -d xsdemo >/home/xiaofang/backup.sql #dump 倾倒;倾卸
7、还原数据库
mysql -u root -p xsdemo < /home/xiaofang/backup.sql


七、修改表
alter table... #更多内容参见?Alter table;
e.g.

alter table t1 add price double not null default 0.00;
alter table t1 add sex varchar(5) after name; #在姓名之后添加性别
alter table t1 add height double first; #在第一位置添加身高
alter table t1 modify sex char(3); #modify适用于改类型
alter table t1 change name username varchar(5);#change 既可以更改字段名,又可以更改类型
alter table t1 rename users; #直接修改表名
alter table t1 drop age; #删除字段
drop table if exists users; #删除数据表

 

http://blog.csdn.net/zjf280441589/article/details/18660509

http://blog.csdn.net/zjf280441589/article/details/19496181

http://blog.csdn.net/zjf280441589/article/details/19496303

  • 大小: 37.7 KB
分享到:
评论

相关推荐

    MySQL-5-7——从.入.门.到.精.通.pdf.zip

    《MySQL-5-7——从入门到精通》这本书是一本专为MySQL 5.7版本设计的详尽教程,旨在帮助读者从初识MySQL到掌握其高级特性,从而成为数据库管理的专业人士。PDF版本提供了高清的扫描内容,保证了阅读体验,方便读者...

    MySQL 入门学习 ——基础教程

    MySQL入门学习(1)。  MySQL入门学习(1) · 安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合。在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选。本人在Windows98环境下...

    Web编程入门——字节跳动.zip

    在这个压缩包中包含的"Web编程入门——字节跳动.pptx"文件,很可能是对这一主题的详细讲解,通过PPT的形式,易于理解和学习。 首先,Web编程的基础是HTML、CSS和JavaScript,这三者构成了网页的基本结构。HTML...

    Ourea Go Framework(csdn)————程序.pdf

    **Ourea Go Framework** 是一个轻量级但功能逐渐完善的Go语言开发框架,由开发者Houhuiyang创建。该框架旨在简化Go应用程序的构建,支持依赖注入,并且采用了领域驱动设计(DDD)的简化版本。框架源代码遵循Apache ...

    Beetlsql自学笔记(csdn)————程序.pdf

    创建好数据库表后,即可开始使用BeetlSQL进行数据操作。 通过上述介绍,我们可以看到BeetlSQL是一个全面且高度可定制的数据访问框架,它弥补了传统数据库工具的不足,提高了开发效率,同时也为大数据和物联网场景...

    Web开发入门经典——使用PHP6、Apache和MySQL.rar

    这份"Web开发入门经典——使用PHP6、Apache和MySQL"的教程资源将帮助初学者理解这三个工具的基本概念和实际应用。 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适合于Web开发。PHP6,...

    2021年最新Java后端学习路线,适用于所有想要踏入Java行业的初学者(csdn)————程序.pdf

    以下是一份2021年更新的Java后端学习路线,旨在帮助入门者逐步深入Java世界。 首先,基础阶段是学习任何编程语言的关键。在Java的世界里,你需要掌握基础语法、数据类型、方法、面向对象编程概念以及异常处理。理解...

    MySql简单的入门教程

    ### MySQL简单入门教程知识点 #### 一、MySQL简介与安装前提 - **MySQL**是一种广泛使用的开源关系型数据库管理系统(RDBMS),支持多种操作系统。它以其高性能、稳定性和易用性而闻名,常用于Web应用的数据存储。 #...

    mysql入门教程(适合新手呀)

    在学习过程中,"mysql入门.txt"这个文件应该包含了详细的步骤和示例,帮助你更好地理解和实践这些概念。记得理论与实践相结合,多动手操作,遇到问题不要怕,查阅文档或在线资源,逐步提高你的MySQL技能。 总的来说...

    cpp-MySQL入门教程MySQLtutorialbook

    **MySQL入门教程——cpp-MySQL实战** MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),以其高效、稳定和易用性而闻名。本教程专为C++开发者设计,旨在帮助初学者掌握如何使用C++与MySQL进行数据交互。...

    MySQL 8.0 实战教程从入门到项目实战.docx

    ### MySQL 8.0 实战教程:从入门到项目实战 #### 第一部分:MySQL 8.0 入门 **1.1 安装 MySQL 8.0** MySQL 8.0 的安装对于初学者来说相对简单。首先,访问 MySQL 官方网站下载适合您操作系统版本的安装包。...

    MyBatis学习总结——MyBatis快速入门.docx

    - 使用MySQL数据库,并通过SQL脚本创建所需的数据库和表。例如,你可以创建一个名为users的表,包含必要的字段。 3. **MyBatis配置** - 创建MyBatis的主配置文件`conf.xml`,在src目录下。这个文件包含了数据源...

    21分钟 MySQL 入门教程.docx

    在MySQL中,“关系型”主要指代的是数据的组织形式——以表格的形式存在。 #### 表格构成 - **表头(Header)**:指的是表中的每一列的名称,用于标识该列所代表的信息类别。 - **列(Column)**:列是一组相同类型...

    mysql安装软件及安装视频.zip

    总的来说,“mysql安装软件及安装视频.zip”文件是一个全面的MySQL入门资源,无论你是初次接触MySQL还是需要回顾安装过程,都能从中受益。通过观看视频和实践操作,你将能够顺利地在你的计算机上搭建起一个功能完备...

    php学习教程——十天学会php

    在本“php学习教程——十天学会php”中,我们将深入探讨PHP这门流行的服务器端脚本语言,它被广泛用于构建动态网站和应用程序。PHP(Hypertext Preprocessor)是一种开源、跨平台的编程语言,以其易学易用、功能强大...

    java 入门教程课件——j2se

    本套“Java入门教程课件”针对初学者,旨在帮助他们理解和掌握Java编程的基本概念和技术。 1. **Java入门**: - **Java简介**:Java是一种跨平台的、面向对象的编程语言,由Sun Microsystems公司开发,其特点包括...

    入门学习struts——合同管理系统

    2. **数据库设计**:描述中提到的MySQL数据库脚本可能是用于创建合同管理系统的数据表结构,涉及到的关系可能包括合同信息、用户信息、状态跟踪等。你需要理解如何使用SQL进行数据操作,并且熟悉如何在Struts1中与...

    SQL基本语法教程——让你快速入门

    SQL(Structured Query Language)是一种用于管理和处理关系数据库的标准语言,它的功能强大且广泛应用于各种数据库系统,如MySQL、Oracle、SQL Server等。本教程旨在帮助初学者快速掌握SQL的基本语法,以便能有效地...

Global site tag (gtag.js) - Google Analytics