一、数据库基础
什么是数据库
数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。
表:是一种结构化的文件,可以用来存储数据(类似Excel表)。数据库就是由成千上万个表组成。
什么事SQL
sql是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。
SQL的语句规范:
<1> 在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;
<2> SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。
<3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。
什么是Mysql
Mysql:是一种数据库软件,用来操作数据库。
MySQL的优点:
- MySQL开放源代码,一般都可以免费使用,成本低。
- 执行效率高。
- 操作简单,易学。
二、连接数据库
连接数据库需要以下信息:
主机名:本地一般为(localhost)
端口号:MySQL默认端口为:3306
用户名和密码:
三、数据类型
常见的数值类型
作用:id,年龄,工资等需要做运算的变量
BIT类型
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
注意:对于位字段需要使用函数读取
bin()显示为二进制
hex()显示为十六进制
实例:
mysql> create table b(id bit); Query OK, 0 rows affected (0.06 sec) mysql> desc b; +-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | id | bit(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+ 1 row in set (0.01 sec) mysql> insert b values(1); #插入数据 Query OK, 1 row affected (0.01 sec) mysql> select * from b; #查找数据,看不到 +------+ | id | +------+ | | +------+ 1 row in set (0.00 sec) mysql> select bin(id) from b; #加上bin得出数据 +---------+ | bin(id) | +---------+ | 1 | +---------+ 1 row in set (0.00 sec)
字符串类型:
存储字符串:
CHAR系列 :CHAR VARCHAR
TEXT系列 : TINYTEXT TEXT MEDIUMTEXT LONGTEXT
存储二进制数据:
BINARY系列: BINARY VARBINARY
BLOB 系列 : TINYBLOB BLOB MEDIUMBLOB LONGBLOB
char (m)
CHAR列的长度固定为创建表时声明的长度: 0 ~ 255。其中m代表字符串的长度。
PS: 即使数据小于m长度,也会占用m长度
varchar(m)
VARCHAR列中的值为可变长字符串,长度: 0 ~ 65535。其中m代表该数据类型所允许保存的字符串
的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度
更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
text
text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
mediumtext
文本的最大长度为 16,777,215 (2**24 − 1)字节
ongtext
文本的最大长度为 4,294,967,295 or 4GB (2**32 − 1)字节
在查询的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格。 mysql> create table t1(x char(5),y varchar(5)); mysql> insert into t1 values('你瞅啥 ','瞅你妹 '); mysql> select x,length(x),y,length(y) from t1; +--------+-----------+----------+-----------+ | x | length(x) | y | length(y) | +--------+-----------+----------+-----------+ | 你好啊 | 9 | 你好啊 | 11 | +--------+-----------+----------+-----------+
时间类型
作用:存储时间、日期等数据
例:
mysql> CREATE TABLE dty(d DATE,t TIME,dt DATETIME,y YEAR,ts TIMESTAMP); Query OK, 0 rows affected (0.14 sec) mysql> desc dty; +-------+-----------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------+------+-----+-------------------+-----------------------------+ | d | date | YES | | NULL | | | t | time | YES | | NULL | | | dt | datetime | YES | | NULL | | | y | year(4) | YES | | NULL | | | ts | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +-------+-----------+------+-----+-------------------+-----------------------------+ mysql> INSERT INTO dty VALUES (now(),now(),now(),now(),now()); Query OK, 1 row affected, 1 warning (0.06 sec) mysql> SELECT * FROM dty; +------------+----------+---------------------+------+---------------------+ | d | t | dt | y | ts | +------------+----------+---------------------+------+---------------------+ | 2018-06-23 | 22:17:36 | 2018-06-23 22:17:36 | 2018 | 2018-06-23 22:17:36 | +------------+----------+---------------------+------+---------------------+ 1 row in set (0.01 sec)
枚举类型和集合类型:
字段的值只能在给定范围中选择,如单选框,多选框
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
例:
mysql> CREATE TABLE shorts(name VARCHAR(40), sex ENUM("man", "woman")); Query OK, 0 rows affected (0.08 sec) mysql> DESC shorts; +-------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+-------+ | name | varchar(40) | YES | | NULL | | | sex | enum('man','woman') | YES | | NULL | | +-------+---------------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) mysql> INSERT INTO shorts VALUES("wallace","man"); Query OK, 1 row affected (0.05 sec) mysql> SELECT * FROM shorts; +---------+------+ | name | sex | +---------+------+ | wallace | man | +---------+------+ 1 row in set (0.00 sec) mysql> INSERT INTO shorts(name, sex) VALUES ("wallace","aaa"); #插入不存在的值会报错 ERROR 1265 (01000): Data truncated for column 'sex' at row 1
数据库的操作
-- 1.创建数据库(在磁盘上创建一个对应的文件夹) create database [if not exists] db_name [character set xxx] -- 2.查看数据库 show databases;查看所有数据库 show create database db_name; 查看数据库的创建方式 -- 3.修改数据库 alter database db_name [character set xxx] -- 4.删除数据库 drop database [if exists] db_name; -- 5.使用数据库 切换数据库 use db_name; -- 注意:进入到某个数据库后没办法再退回之前状态,但可以通过use进行切换 查看当前使用的数据库 select database();
数据表操作:
创建表:
CREATE TABLE tablename(字段1 数据类型,
字段2 数据类型 ...)
mysql> CREATE TABLE dty(d DATE, dty:表名
t TIME, d,t,dt,ts,t:表的字段名,类似execl的表头
dt DATETIME, DATE,...:表示的是每一字段的数据类型
y YEAR,
ts TIMESTAMP);
查看表信息:
desc tab_name 查看表结构 show columns from tab_name 查看表结构 show tables 查看当前数据库中的所有的表 show create table tab_name 查看当前数据库表建表语句
例:
mysql> DESC dty; +-------+-----------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------+------+-----+-------------------+-----------------------------+ | d | date | YES | | NULL | | | t | time | YES | | NULL | | | dt | datetime | YES | | NULL | | | y | year(4) | YES | | NULL | | | ts | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +-------+-----------+------+-----+-------------------+-----------------------------+ 5 rows in set (0.00 sec) mysql> SHOW COLUMNS FROM dty; +-------+-----------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------+------+-----+-------------------+-----------------------------+ | d | date | YES | | NULL | | | t | time | YES | | NULL | | | dt | datetime | YES | | NULL | | | y | year(4) | YES | | NULL | | | ts | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +-------+-----------+------+-----+-------------------+-----------------------------+ 5 rows in set (0.00 sec) mysql> SHOW tables; +---------------------+ | Tables_in_tornadodb | +---------------------+ | article | | b | | dty | | grade | | shorts | | student | | t | | text | | user | | user_1 | | user_article | | user_details | +---------------------+ 12 rows in set (0.00 sec) mysql> SHOW CREATE TABLE dty; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | dty | CREATE TABLE `dty` ( `d` date DEFAULT NULL, `t` time DEFAULT NULL, `dt` datetime DEFAULT NULL, `y` year(4) DEFAULT NULL, `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)