MySQL数据库基础知识
2017-11-09 12:08
288 查看
一、Database Server:数据库服务器,专用于存储网页中的数据。
(1)关系型数据库管理系统分为两部分:
服务器端:负责永久存储数据、维护数据,人不能直接观看;
服务器上数据的逻辑结构: Server > Database > Table > Row > Column
客户端:用于向服务器发起“增删改查”命令,呈现出操作的结果
(2)MySQL常用管理命令(在命令行工具中)
SHOW DATABASES; 显示服务器中当前所有的数据库名
USE 库名; 进入指定的数据库中
SHOW TABLES; 显示当前库中有哪些数据表
DESC 表名; 描述指定表的结构(有哪些列)
提示:
(1)MySQL命令大小写都可以!推荐在编写关键字的时候用大写字母;非关键字可以小写。
(2)所有命令必须以英文分号结束。
(3)SQL语言
结构化查询语言,专用于操作(增删改查)数据库服务器中的数据。是一门国际标准化语言,被各大数据库厂家所支持。
常用的SQL语句:
#丢弃一个已有的数据库(如果存在的话)
DROP DATABASE IF EXISTS 库名;
#创建新的数据库,其中保存的字符使用指定的字符集
CREATE DATABASE 库名 CHARSET=UTF8;
#进入指定的数据库
USE 库名;
#创建保存特定数据的表
CREATE TABLE 表名 (列名1 类型, 列名2 类型, ...);
(2)常用SQL命令
添加数据:
INSERT INTO 表名 VALUES (....);
删除数据:
DELETE FROM 表名;#删除所有记录行,慎用!
<
a75e
/span>DELETE FROM 表名 WHERE 列=值; #删除满足条件的行
修改数据:
UPDATE 表名 SET 列=值, 列=值; #修改所有记录行,慎用!
UPDATE 表名 SET 列=值, 列=值 WHERE 列=值;#修改满足条件的行
查询数据:
SELECT * FROM 表名;
(3)MySQL中的列类型:
数字类型
TINYINT: 占1个字节, -128~127
SMALLINT: 占2个字节,-32768~32767
INT: 占4个字节,-2147483648~2147483647
BIGINT:占8个字节,....
----------------------
FLOAT(M,D):单精度浮点型,占4个字节,M表示总有效位数,D表示小数点后面的有效位数
DOUBLE(M,D):双精度浮点型,占8个字节
DECIMAL(M,D):严格定点数,用于精确运算,如货币金额
字符串类型
CHAR(M): M不能超过255
VARCHAR(M):M不能超过65535
TEXT(M): M不能超过2^32,即40亿个字符
日期时间类型
DATE: 日期类型,必须用引号括起来,采用'yyyy-mm-dd'格式
TIME: 时间类型,必须用引号括起来,采用'hh:mi:ss'格式
DATETIME: 日期时间类型,必须用引号括起来,采用'yyyy-mm-dd hh:mi:ss'格式
布尔类型
BOOL/BOOLEAN:只能表示TRUE(等价于1)或FALSE(等价于0)
如何存储项目中的“日期/时间”数据
方式1:DATE/DATETIME,不足:不同国家的人日期格式不同的!'2017-12-31'、'12-31-2017'、'31/12/2017'
方式2:VARCHAR,不足:不方便比较大小 '578'>'2017'
方式3:BIGINT,表示距离计算机元年经过了多少毫秒 1000 => 1970-1-1 0:0:1
1000*60=> 1970-1-1 0:1:0
1000*60*60=> 1970-1-1 1:0:0
1000*3600*24=> 1970-1-2 0:0:0
1000*3600*24*365=> 1971-1-1 0:0:0
....
计算机元年:1970-1-1 0:0:0
注:CHAR(8)和VARCHAR(8)的区别
user_name CHAR(8):
定长字符串,可能产生空间浪费,但读取速度快
'a' 实际存储为: 'a\0\0\0\0\0\0\0'
'ab'实际存储为: 'ab\0\0\0\0\0\0'
'abc'实际存储为: 'abc\0\0\0\0\0'
'abcd'实际存储为: 'abcd\0\0\0\0'
'abcde'实际存储为: 'abcde\0\0\0'
'abcdef'实际存储为: 'abcdef\0\0'
'abcdefg'实际存储为: 'abcdefg\0'
'abcdefgh'实际存储为: 'abcdefgh'
'abcdefghi'实际存储为: 'abcdefgh'
user_name VARCHAR(8): 变长字符串
不定长字符串,不会产生空间浪费,但读取速度稍慢
'a' 实际存储为: 'a\0'
'ab'实际存储为: 'ab\0'
'abc'实际存储为: 'abc\0'
'abcd'实际存储为: 'abcd\0'
'abcde'实际存储为: 'abcde\0'
'abcdef'实际存储为: 'abcdef\0'
'abcdefg'实际存储为: 'abcdefg\0'
'abcdefgh'实际存储为: 'abcdefgh'
'abcdefghi'实际存储为: 'abcdefgh'
(4)列上的约束
主键约束( PRIMARY KEY )
语法:列名 类型 PRIMARY KEY
声明为“主键”的列上不能出现NULL值,且不能重复,如商品编号;
表中所有的记录行会自动按照主键列上的值进行排序 —— 一个表至多只能声明一个主键列。
唯一约束( UNIQUE )
语法:列名 类型 UNIQUE
声明为“唯一”约束的列上不能出现重复值,但可以出现多个NULL
非空约束( NOT NULL )
语法:列名 类型 NOT NULL
声明为“非空”约束的列上不能出现NULL,但可以重复
检查约束 —— MySQL不支持
默认值约束( DEFAULT )
语法:列名 类型 DEFAULT 值
声明了默认值的列若未指定值,则使用默认值;若指定的特定的值,则使用指定的值。
外键约束和自增列
主键约束和外键约束
主键:PRIMARY KEY,唯一且非空约束,是排序依据;
外键:FOREIGN KEY,可重复可为空,外键列上出现的值必须在另外一个表的主键列上出现过
外键约束的语法: references
列名 类型,
FOREIGN KEY(列名) REFERENCES 表名(列名)
MySQL数据库中专有的“自增列”
AUTO_INCREMENT,只有MySQL支持,用于实现自增列!
自增列无需手工指定特定的值,只需要赋值为NULL,MySQL服务器会自动查询当前已有的最大整数,在此基础上+1.
语法: CREATE TABLE xx (
主键列名 INT PRIMARY KEY AUTO_INCREMENT,
...
);
提示:自增列只能用于主键列,且必须是整数型主键。自增列也可以手工赋值。
(1)关系型数据库管理系统分为两部分:
服务器端:负责永久存储数据、维护数据,人不能直接观看;
服务器上数据的逻辑结构: Server > Database > Table > Row > Column
客户端:用于向服务器发起“增删改查”命令,呈现出操作的结果
(2)MySQL常用管理命令(在命令行工具中)
SHOW DATABASES; 显示服务器中当前所有的数据库名
USE 库名; 进入指定的数据库中
SHOW TABLES; 显示当前库中有哪些数据表
DESC 表名; 描述指定表的结构(有哪些列)
提示:
(1)MySQL命令大小写都可以!推荐在编写关键字的时候用大写字母;非关键字可以小写。
(2)所有命令必须以英文分号结束。
(3)SQL语言
结构化查询语言,专用于操作(增删改查)数据库服务器中的数据。是一门国际标准化语言,被各大数据库厂家所支持。
常用的SQL语句:
#丢弃一个已有的数据库(如果存在的话)
DROP DATABASE IF EXISTS 库名;
#创建新的数据库,其中保存的字符使用指定的字符集
CREATE DATABASE 库名 CHARSET=UTF8;
#进入指定的数据库
USE 库名;
#创建保存特定数据的表
CREATE TABLE 表名 (列名1 类型, 列名2 类型, ...);
(2)常用SQL命令
添加数据:
INSERT INTO 表名 VALUES (....);
删除数据:
DELETE FROM 表名;#删除所有记录行,慎用!
<
a75e
/span>DELETE FROM 表名 WHERE 列=值; #删除满足条件的行
修改数据:
UPDATE 表名 SET 列=值, 列=值; #修改所有记录行,慎用!
UPDATE 表名 SET 列=值, 列=值 WHERE 列=值;#修改满足条件的行
查询数据:
SELECT * FROM 表名;
(3)MySQL中的列类型:
数字类型
TINYINT: 占1个字节, -128~127
SMALLINT: 占2个字节,-32768~32767
INT: 占4个字节,-2147483648~2147483647
BIGINT:占8个字节,....
----------------------
FLOAT(M,D):单精度浮点型,占4个字节,M表示总有效位数,D表示小数点后面的有效位数
DOUBLE(M,D):双精度浮点型,占8个字节
DECIMAL(M,D):严格定点数,用于精确运算,如货币金额
字符串类型
CHAR(M): M不能超过255
VARCHAR(M):M不能超过65535
TEXT(M): M不能超过2^32,即40亿个字符
日期时间类型
DATE: 日期类型,必须用引号括起来,采用'yyyy-mm-dd'格式
TIME: 时间类型,必须用引号括起来,采用'hh:mi:ss'格式
DATETIME: 日期时间类型,必须用引号括起来,采用'yyyy-mm-dd hh:mi:ss'格式
布尔类型
BOOL/BOOLEAN:只能表示TRUE(等价于1)或FALSE(等价于0)
如何存储项目中的“日期/时间”数据
方式1:DATE/DATETIME,不足:不同国家的人日期格式不同的!'2017-12-31'、'12-31-2017'、'31/12/2017'
方式2:VARCHAR,不足:不方便比较大小 '578'>'2017'
方式3:BIGINT,表示距离计算机元年经过了多少毫秒 1000 => 1970-1-1 0:0:1
1000*60=> 1970-1-1 0:1:0
1000*60*60=> 1970-1-1 1:0:0
1000*3600*24=> 1970-1-2 0:0:0
1000*3600*24*365=> 1971-1-1 0:0:0
....
计算机元年:1970-1-1 0:0:0
注:CHAR(8)和VARCHAR(8)的区别
user_name CHAR(8):
定长字符串,可能产生空间浪费,但读取速度快
'a' 实际存储为: 'a\0\0\0\0\0\0\0'
'ab'实际存储为: 'ab\0\0\0\0\0\0'
'abc'实际存储为: 'abc\0\0\0\0\0'
'abcd'实际存储为: 'abcd\0\0\0\0'
'abcde'实际存储为: 'abcde\0\0\0'
'abcdef'实际存储为: 'abcdef\0\0'
'abcdefg'实际存储为: 'abcdefg\0'
'abcdefgh'实际存储为: 'abcdefgh'
'abcdefghi'实际存储为: 'abcdefgh'
user_name VARCHAR(8): 变长字符串
不定长字符串,不会产生空间浪费,但读取速度稍慢
'a' 实际存储为: 'a\0'
'ab'实际存储为: 'ab\0'
'abc'实际存储为: 'abc\0'
'abcd'实际存储为: 'abcd\0'
'abcde'实际存储为: 'abcde\0'
'abcdef'实际存储为: 'abcdef\0'
'abcdefg'实际存储为: 'abcdefg\0'
'abcdefgh'实际存储为: 'abcdefgh'
'abcdefghi'实际存储为: 'abcdefgh'
(4)列上的约束
主键约束( PRIMARY KEY )
语法:列名 类型 PRIMARY KEY
声明为“主键”的列上不能出现NULL值,且不能重复,如商品编号;
表中所有的记录行会自动按照主键列上的值进行排序 —— 一个表至多只能声明一个主键列。
唯一约束( UNIQUE )
语法:列名 类型 UNIQUE
声明为“唯一”约束的列上不能出现重复值,但可以出现多个NULL
非空约束( NOT NULL )
语法:列名 类型 NOT NULL
声明为“非空”约束的列上不能出现NULL,但可以重复
检查约束 —— MySQL不支持
默认值约束( DEFAULT )
语法:列名 类型 DEFAULT 值
声明了默认值的列若未指定值,则使用默认值;若指定的特定的值,则使用指定的值。
外键约束和自增列
主键约束和外键约束
主键:PRIMARY KEY,唯一且非空约束,是排序依据;
外键:FOREIGN KEY,可重复可为空,外键列上出现的值必须在另外一个表的主键列上出现过
外键约束的语法: references
列名 类型,
FOREIGN KEY(列名) REFERENCES 表名(列名)
MySQL数据库中专有的“自增列”
AUTO_INCREMENT,只有MySQL支持,用于实现自增列!
自增列无需手工指定特定的值,只需要赋值为NULL,MySQL服务器会自动查询当前已有的最大整数,在此基础上+1.
语法: CREATE TABLE xx (
主键列名 INT PRIMARY KEY AUTO_INCREMENT,
...
);
提示:自增列只能用于主键列,且必须是整数型主键。自增列也可以手工赋值。
相关文章推荐
- mysql数据库基础知识
- mysql数据库的基础知识
- [python] 专题九.Mysql数据库编程基础知识
- mysql数据库基础知识
- Mysql数据库基础知识
- 【MySQL新手必看】百宝云的MySQL数据库基础知识
- Mysql数据库基础知识
- Python基础知识——对mysql数据库的操作
- MySql数据库相关基础知识
- MySQL数据库备份的基础知识大全
- 基于mysql数据库的基础知识一
- [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识
- 【python_mysql】mysql数据库基础知识总结
- 基于mysql数据库的基础知识二
- mysql数据库基础知识
- 基于mysql数据库的基础知识三
- JavaWeb Mysql数据库基础知识
- python 专题九 Mysql数据库编程基础知识
- MYSQL数据库基础知识
- MYSQL数据库基础知识及操作