`

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 入门学习 ——基础教程

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

    Linux课程大纲——从入门到精通Linux的教程

    2主流Linux操作系统发行版简介 3 RHEL4安装 3.1创建RHEL4虚拟机 3.2安装RHEL4 3.3配置RHEL4 4 RHEL4基本命令使用 4.1 SSH Secure Shell Client工具 4.1.1 SSH Secure Shell Client安装 4.1.2 SSH Secure Shell...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、...

    JIRA 从入门到精通.doc

    图文并茂,手把手教你学习 JIRA。 内容预览: JIRA入门到精通 ——hjjlearning,2008.06.27 第一章、 JIRA介绍 跟踪并管理在项目开发和维护过程中出现的问题(如:缺陷,新特性,任务,改进等)是项目管理很重要的任务...

    nosql 入门教程

    5.1.3 键/值映射表的创建操作 93 5.2 访问数据 96 5.2.1 用MongoDB访问文档 96 5.2.2 用HBase访问数据 97 5.2.3 查询Redis 98 5.3 更新和删除数据 98 5.3.1 使用MongoDB、HBase和Redis更新及修改数据 98 ...

    iuhyiuhkjh908u0980

    教程包含基本的步骤像创建目录结构,建立build.xml文件来使用Ant构建工具创建程序.接着我们会解释在这个程序中需要的Java,Jsp和配置文件. 创建项 ... by Checkmate 2009-03-23 回复 (6) ivy中文参 ... 安装ivy主要有...

    PHP和MySQL Web应用开发核心技术 源码

    细致分析如何创建健壮的Web数据库应用程序,以及如何避免困扰许多PHP和MySQL开发者的常见错语。 本书是为程序员提供的综合且实用的指南,教他们使用PHP和MySQL开发具有产品品质的、使用数据库的Web应用程序。本书...

    Node.js 实战

    《Node.js 实战(双色)》通过8 个实例讲解了Node.js 在实战开发中的应用,涉及Node.js ..., ——张轩丞(某网花名朋春)就职于某网站数据平台 曾主导开发的ITier(标准数据中间层)、MyFox(分布式MySQL集群代理层)

    asp.net知识库

    C# 获取数据库中某个某个表的创建脚本 DbHelperV2 - Teddy的通用数据库访问组件设计和思考 也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等  语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) ...

    程序员的SQL金典.rar

    最好的sql教程 轻举技术之“纲”,张合用之“目”,锻造SQL高可用性数据库应用指南从理论到实践,凝聚SQL主流数据库最... A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用

    程序员的SQL金典6-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么 ... A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典7-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么 ... A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典3-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么 ... A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典4-8

    目录 第1章 数据库入门  1.1 数据库概述  1.1.1 数据库与数据库管理系统  1.1.2 数据库能做什么 ... A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    数据库原理(第5版)

    所以尽管本书的示例是用Microsoft操作系统、SQL Server 2008/2008 R2 Express版、Microsoft Access 2010、Microsoft Excel 2010和IIS Web服务器创建的,但它们大都很容易用Linux、MySQL Server Community版、...

    南阳理工学院PHP编程讲义.rar

    第9 章图形化管理MySQL——phpMyAdmin······ 125 9.1 phpMyAdmin 简介·······125 9.2 phpMyAdmin 的基本操作···125 9.3 用phpMyAdmin 创建数据库·129 9.3.1 xinfei 数据库基本结构·· 129 ...

    Linux程序设计 第4版.haozip01

    16.8.2 模式对话框 578 16.8.3 非模式对话框 579 16.8.4 gtkmessagedialog 580 16.9 cd数据库应用程序 581 16.10 小结 592 第17章 用qt进行kde编程 593 17.1 kde和qt简介 593 17.2 安装qt 594 17.3 信号和槽...

    Linux程序设计 第4版.haozip02

    16.8.2 模式对话框 578 16.8.3 非模式对话框 579 16.8.4 gtkmessagedialog 580 16.9 cd数据库应用程序 581 16.10 小结 592 第17章 用qt进行kde编程 593 17.1 kde和qt简介 593 17.2 安装qt 594 17.3 信号和槽...

Global site tag (gtag.js) - Google Analytics