数据库(Database,简称DB)
-
概念
长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库” -
作用
保存、管理数据 -
分类
- 关系型数据库(SQL)
MySQL、Oracle、SQL Server、SQLite、DB2 - 非关系型数据库(NOSQL)
Redis、MongoDB
- 关系型数据库(SQL)
现在的数据库主要以关系型数据库为主流,但是别的数据库也是存在的,比如层次型、网状型、面向对象数据模型等,但是用的少,所以上边分类只分关系型和非关系型。
我也就主要说说关系型数据库中代表性的应用广泛的MySQL数据库。
MySQL 数据库
- 概念
是现流行的开源、免费的关系型数据库 - 特点
免费、开源数据库
小巧、功能齐全
使用便捷
可运行于Windows或Linux操作系统
可适用于中小型甚至大型网站应用
它的安装、管理工具SQLyog安装就不详说了,自己找应该挺多,也挺简单。我主要用的老师推荐的管理工具Navicat操作,语句都一样。
SQL语句(结构化查询语句)
-
概念
关系数据库的标准语言,也是通用的、功能极强的关系数据库语言 -
分类
命令行操作数据库
- 创建数据库: CREATE DATABASE 数据库名称;
CREATE DATABASE myschool;
- 删除数据库: DROP DATABASE 数据库名称;
DROP DATABASE myschool;
- 查询所有数据库
SHOW DATABASES;
- 切换到数据库下: USE 数据库名称;
USE myschool;
命令行创建数据表
数据库下有多个属于自己的表,并且可以相互关联。创建表之前先要切换到该数据库下再创建。
- 创建表:
CREATE TABLE [ IF NOT EXISTS ]表名
(
字段名1
列类型 [ 属性 ] [ 索引 ] [注释] ,
字段名2
列类型 [ 属性 ] [ 索引 ] [注释] ,
… …
字段名n
列类型 [ 属性 ] [ 索引 ] [注释]
) [ 表类型 ] [ 表字符集 ] [注释] ;
这里的列类型、列属性、表类型等咱们再详细说一说
列类型
- 概念: 规定数据库中该列存放的数据类型
- 分类:
数值类型
字符串类型
日期和时间型数值类型
NULL值:就是能不能为null值(空)。注意:不要用NULL进行算术运算,结果仍为NULL
字段属性
- UNSIGNED:
无符号的
声明该数据列不允许负数 - ZEROFILL:
0填充的
不足位数的用0来填充,如 int(3),5则为 005 - AUTO_INCREMENT:
自动增长的,每添加一条数据,自动在上一个记录数上加1
通常用于设置主键,且为整数类型
可定义起始值和步长 - COMMENT:
注释 对于 表或 列的描述
COMMENT=‘测试表’; - DEFAULT:
默认的
用于设置默认值
例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为“男”的值 - PRIMARY KEY :
主键
表属性
- ENGINE:
表类型,也就是设置表的存储模式 ,一般为ENGINE=InnoDB / MyISAM - charset:
字符编码集,设置 charset=utf8(包含中文的编码集);
下边举一个具体实例,创建一个课程表:
CREATE TABLE IF NOT EXISTS `subject`(
subjectNo int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '科目编号',
subjectName varchar(50) NOT NULL COMMENT '科目名称',
classHour int(4) NOT NULL COMMENT '课时',
gradeID int(4) COMMENT '年级编号'
) ENGINE = InnoDB,COMMENT='年级表',charset=utf8;
我们来看看这个创建好的空表:
这个表的属性(和咱们创建时设置的一样):
然后说一些别的常用语句吧:
- 创建表同时 复制原有表中的数据与结构
CREATE TABLE `newsubject` SELECT * FROM `subject`;
- 创建表同时 只复制表中的结构,不要数据
CREATE TABLE `newsubject2` SELECT * FROM `subject` where 1=2;
- 创建表同时 复制表中的指定列
CREATE TABLE `newsubject3` SELECT subjectNo,subjectName FROM `subject` where 1=2;
- 查询表的结构
DESC `subject`; -- 简单 常用(注释就是-- )
DESCRIBE `subject`;
SHOW COLUMNS IN `subject`;
SHOW COLUMNS FROM `subject`;
EXPLAIN `subject`;
- 查询已创建表的语句
SHOW CREATE TABLE `subject`;
命令行修改数据表
- 修改表名称 语法:ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE newsubject RENAME AS newsubject1;
- 添加字段 语法: ALTER TABLE 表名 ADD 字段名 列类型 [ 属性 ]
ALTER TABLE newsubject1 ADD test VARCHAR(50) NOT NULL;
- 修改字段 语法一: ALTER TABLE 表名 MODIFY 字段名 列类型 [ 属性 ]
ALTER TABLE newsubject1 MODIFY test VARCHAR(10) NULL
语法二 : ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列类型 [ 属性 ]
ALTER TABLE newsubject1 CHANGE test test2 VARCHAR(10) NULL
- 删除字段 语法: ALTER TABLE 表名 DROP 字段名
ALTER TABLE newsubject1 DROP test2
- 增加主键 语法:ALTER TABLE 表名 ADD PRIMARY KEY (字段名);
ALTER TABLE newsubject1 ADD PRIMARY KEY (subjectNo);
- 删除主键 (主键只有一个,所以不需要名字)
ALTER TABLE newsubject1 DROP PRIMARY KEY;
- 创建主外键关系: ALTER TABLE 外键表 ADD FOREIGN KEY (外键列) REFERENCES 主键表(主键列);
ALTER TABLE news ADD FOREIGN KEY (ntid) REFERENCES topic(tid);
- 创建主外键关系 命名关系
ALTER TABLE news ADD CONSTRAINT fk_news_ntid_topic_tid FOREIGN KEY (ntid) REFERENCES topic(tid);
- 删除主外键关系 通过命的名字 fk_news_ntid_topic_tid
ALTER TABLE news DROP FOREIGN KEY `fk_news_ntid_topic_tid`;
命令行操作数据
- 添加语句 语法:INSERT INTO 表名(列名1,列名2,列名3,列名4,…)VALUES(值1,值2,值3,值4,…)
INSERT INTO grade(gradeName)VALUES('大一'); --逐条添加
INSERT INTO grade(gradeName)VALUES('大二'),('大三'),('大四'); -- 逐列添加
INSERT INTO `subject`(subjectName,classHour,gradeID)VALUES('高等数学-1',120,4),('高等数学-2',110,5),('高等数学-3',100,6),('高等数学-5',90,7); --批量添加
- 修改语句 语法: UPDATE 表名 SET column_name(列名) = value(值) [ , column_name2 = value2, …. ] [ WHERE condition(筛选条件) ];
UPDATE student SET studentName = '李四' WHERE studentNo = 1011
UPDATE student SET loginPwd = '000000',email='123@qq.com' WHERE studentNo = 10000
UPDATE student SET loginPwd = '123456' WHERE gradeid=4 AND email = '123@qq.com'
- 删除 语法1: DELETE FROM 表名 [ WHERE condition ]; – (要删主表先删子表)
语法2:TRUNCATE 表名 --(完全清空表数据,但表结构、索引、约束等不变)
DELETE FROM student WHERE studentNo = 1010
TRUNCATE testTable
- 查询null值
SELECT * FROM student WHERE email is null
SELECT * FROM student WHERE email is NOT null
创建数据库、创建表(属性)、添加数据、修改数据、删除数据我们都简单聊了聊,最后最重要的查询语句,我们下一篇再详细介绍。希望对你有帮助,有问题的麻烦批评指正。