数据库组织数据的方式
前面已经讲过了创建数据库相关的(没看的,可以点此链接 跳过去),既然数据库已经创建好了,那么我们就要开始往里面装数据了,要怎么装呢?MySQL(不止MySQL是这样,Oracle等其它也是一样)组织数据是像excel表格一样。首先创建一张表,设置表的列的保存的内容是什么,插入进表的一行数据称为一个记录。
在具体到代码创建表之前,我们先来看看MySQL的数据类型,毕竟,知道了数据类型,我们才能为每个表列保存的值设置合适的类型。
MySQL三大数据类型
MySQL数据类型具体可以分为三大类:数值、文本、日期。
数值
数值 | 占用字节 | 说明 |
---|---|---|
BIT | 1/8 | 位类型,默认值1范围(1-64) |
TINYINT[UNSIGNED][ZEROFILL] | 1 | 带符号的范围是-128到127。无符号0-255。相当于java的byte |
BOOL, BOOLEAN | 1 | 范围跟BIT一样,用0、1分别代表false、true。存储时,true和false会被转换为1和0存储 |
SAMLLINT[UNSIGNED][ZEROFILL] | 2 | (相当于java的short) |
MEDIUMINT[UNSIGNED][ZEROFILL] | 3 | 范围为2的24次方 |
INT[UNSIGNED][ZEROFILL] | 4 | 范围2的32次方(相当于java的int) |
BIGINT[UNSIGNED][ZEROFILL] | 8 | 范围2的64次方(相当于java的long类型) |
FLOAT[(M,D)][UNSIGNED][ZEROFILL] | 4 | 范围2的32次方,M指定显示数字的个数,D指定小数位数 |
DOUBLE[(M,D)][UNSIGNED][ZEROFILL] | 8 | 范围2的64次方。M指定显示数字的个数,D指定小数位数 |
文本、二进制
字符串类型 | 占用字节范围 | 说明 |
---|---|---|
CHAR(size) | 0-255 | 定长字符串 |
VARCHAR(size) | 0-65535 | 变长字符串 |
TYINTBLOB,MEDIUMBLOB,LONGBLOB | 0-255, 0-65535, 0-16777215, 0-4294 967295 | 占用字节不同的二进制数据(音乐,图片,视频) |
TINYTEXT, MEDIUMTEXT,LONGTEXT | 0-255, 0-65535, 0-16777215, 0-4294 967295 | 占用字节数不同的文本类型(字符串) |
VARBINARY(M) | 允许长度0-M个字节的定长字节符串,值的长度+1个字节 | |
BINARY(M) | M | 允许长度0-M个字节的定长字节符串 |
需要注意的是 :CHAR
和VARCHAR
类型定长和可变的意思是,一旦CHAR
类型确定了长度,譬如CHAR(10)
,表示10个字节的字符,那么它所占的字节就总是10个字节,即使存放的数据没有10个字节,它所占空间也是10个字节,VARCHAR
和它正好正好相反,譬如VARCHAR(10)
能保存10个字符,但是如果你的数据小于10,那么实际长度取决于实际保存的数据长度。但是如果要保存的数据超过了所声明的大小,SQL语句会报错。
日期
类型 | 占用字节 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 4 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/’838:59:59’ HH:MM:SS | 时间值或持续时间 | |
YEAR | 1 | 1901/2155 | YYYY 年份值 | |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
MySQL三大数据类型上面都已经列出来了,数据类型不止说明了要保存的值是什么类型,还说明了保存值得范围是多少。现在我们就可以开始就创建表来存储数据。
创建表
在创建表之前,应该登入DBMS,然后USE
所创建的数据库,才能创建表。创建表的语法如下:
CREATE TABLE 数据表名
(列声明);
其中列声明之间用逗号隔开。看例子:
CREATE TABLE example
(id TYINT(2) NOT NULL PRIMARY KEY,
name VARCHAR(10) NOT NULL,
);
上面语句在当前使用的数据库创建了一个名为example的表,这个表包括两个字段—id
和 name
,类型分别是TYINT
和 VARCHAR
,NOT NULL
表示数据的值不能是NULL
,字段id
后面的PRIMARY KEY
表示字段id
是主键。
主键的意思是一个表里面独一无二的一个值,靠主键能唯一索引一个表内的一个记录。因为一个表内的数据你不能保证数据值的唯一性,那么当你要查询某条记录时,就比较麻烦。设定主键就便于查询想查询的记录。
查询数据库的表
在你创建一个表后,想要查看是否已经创建成功,或者想查看当前操作的数据库所包含的表可以使用一下语句:
SHOW TABLES;
下面语句可以查询创建详情
SHOW CREATE TABLE 表名;
更改表的列类型
在创建表后,可以通过一下语句查看表字段的详情
SHOW COLUMNS FROM 表名;
或者
DESC 表名;
上述两条语句都可以实现对表字段情况的查询,且结果是一样的,DESC
和 DESCRIBE
是一样的, 可以互换,为了方便才那样写。
此时如果此时发现需要更改字段的类型和名字,如下语句可以做到:
-- 更改列类型
ALTER TABLE 表名 MODIFY 列名 类型;
上面的--
是MySQL的注释。
更改上述创建的表example
的列id
的类型为INT
:
ALTER TABLE example id INT;
-- 更改列名和类型
ALTER TABLE CHANGE COLUMN 列名 新列名 类型;
更改上述创建的表example
的列id
的名字和类型为userid
和SAMLLINT
:
-- 更改列名和类型
ALTER TABLE CHANGE COLUMN id userid SMALLINT;
添加/删除列
添加列的语句也是ALTER TABLE
:
-- 默认在添加在列的最后
ALTER TABLE 表名 ADD 列名 类型;
-- 添加到列的最前面
ALTER TABLE 表名 ADD 列名 类型 frist;
-- 添加到指定列之后
ALTER TABLE 表名 ADD 列名 类型 after 表中已存在的列名
上面语句都很简单,就不在做示例了。
有添加就有删除,现在来看看删除列:
ALTER TABLE 表名 drop 指定的列名
删除列很简单,同样,也不做示例了。
修改表相关
修改表相关这里,我们就只讲下如何修改表的字符集和表名。
修改表的字符集:
ALTER TABLE 表名 CHARACTER SET 字符集;
修改表名:
RENAME TABLE 表名 TO 新表名;
上面都非常简单,就不多说了。
这次内容比较多,写博客也挺费时间的,打字慢,花了将近三小时才弄完,不敢相信!w(゚Д゚)w,看来还要多多加油了。
我自己也能力有限,如果有错的地方,敬请指正。