数据库是什么
数据库就是将大量的数据保存起来,通过计算机加工而成的可以高效访问的数据集合。数据库是长期储存在计算机内,有组织的 可共享的数据集合。也可以通俗的理解成储存数据的仓库。
我们身边的数据库
1. 在你过生日的时候支付宝给你发来祝福
2. 中国移动发送短信提醒你流量的使用情况
3. 登录淘宝后,最近浏览过的商品会推送给你
这是因为支付宝,移动,淘宝掌握了顾客的一些信息,并且拥有能够从大量汇总信息中快速获取所需信息的设备(计算机系统)
常见数据库
①Oracle Database:甲骨文公司
②SQL Server:微软公司
③DB2:IMB公司
④Postgre SQL:开源
⑤MySQL:开源
⑥Access:微软公司(古董)
数据库的基本知识
数据库结构
服务端:用于接收并处理其他程序发出的请求的的程序(软件),或者是安装此类程序的设备(计算机)
客户端:向服务器发出请求的程序(软件),或者是安装此类程序的设备(计算机)
库:就是一堆表组成的数据集合
表(table):类似Excel,又行和列组成的二维表
字段:表的列(垂直方向),可以理解成表格的表头
记录:表的行(水平方向),可以理解为表里面的数据(关系数据库必须以行为单位进行数据读写)
比如:Web访问:服务端:访问的服务器(中间件)客户端:浏览器
基本SQL语法
数据库操作
CREATE DATABASE db_name;【新建数据库】
Show databases;【查看所有数据库】
DROP DATABASE db_name;【删除数据库】
USE db_name;【进入库】==SQL语句结尾一定要用’;’结束==
数据库的连接
在sql根目录打开命令行—>输入:mysql-u root -p_ (访问本地的mysql)—>密码password为 root—>回车进入就相当 于一个客户端了
有时会有倒霉蛋遇到一些错误,这可能大部分是因为密码错误的问题,有些人之前装过sql然后这一次输入的密码和上一次设置的有出入就导致了一些问题的发生。我将解决常见问题的博客放在下面,仅供参考。
mysql提示Can’t connect to MySQL server on localhost (10061)解决方法
Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
进行与数据库的交互
例如: 先连接数据库
create database sjz;【建库】
show databases;【查看所有库名】
use sjz【进入sjz数据库】
drop database sjz;【删除sjz数据库】
数据表操作
CREATE TABLE table_name(column_mame cdumn_type);【新建表】(column_mame:字段名, cdumn_type:字段类型)
Show tables;【查看所有数据库】
DROP TABLE table_name【删除表格】
Desc table_name【查看表的类型】
ALTER TABLE table_name DROP i;【删除表里面的字段】
ALTER TABLE table_name ADD i INT;【添加表里面的字段】
ALTER table table change b bbb int;【修改字段名和属性】
ALTER TABLE <表名> MODIFY <字段1><数据类型> MODIFY只能修改数据类型
表中有六大约束:主键约束、外键约束、非空约束、唯一约束、默认约束、自动增加
主键约束
什么是主键?
PRIMARY KEY(primary key):独一无二(唯一)和不能为空(非空),在表中增加记录时,在该字段下的数据不能重复,不能为空,在表中增加两条记录,如果id字段用了主键约束。则id不能一样,并且不能为空。一般每张表中度有一个字段为主键,唯一标识这条记录。以后需要找到该条记录也可以同这个主键来确认记录
因为主键是唯一的,并且非空,一张表中每个记录的主键度不一样,所以根据主键也就能找到对应的记录。而不是多条重复的记录。
如果没有主键,那么表中就会存在很多重复的记录,那么即浪费存储空间,在查询时也消耗更多资源。
- 单字段主键约束
除此以外;
1 | CREATE TABLE student( |
两种方法都可以
- 多字段主键约束(联合主键)
1 | CREATE TABLE student( |
这个id和name都是主键,说明在以后增加的插入的记录中,id和name不能同时一样.
例如一条记录为id=1,name=yyy、另一条记录为:id=1,name=zzz。这样是可以的
外键约束
外键约束的特点:
外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。
这样被外键关联的两种表的关系可以称为父子表或者主从表。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表。
子表被外键约束修饰的字段必须和父表的主键字段的类型一样。
1 | CREATE TABLE tableA( |
==解释:tableB中有一个名为tableA_tableB1的外键关联了tableA和tableB两个表,被外键约束修饰的字段为tableB中的deptId,主键字段为tableA中的id==
通俗来讲,有两张表,一张表是emp(员工)表,另一张表是dept(部门)表,一个员工属于一个部门。
那么如何通过员工能让我们知道他在哪个部门呢?那就只能在员工表中增加一个字段,能代表员工所在的部门,那该字段就只能是存储dept表中的主键了(因为主键是唯一的,才能确实是哪个部门,进而代表员工所在的部门,如果是部门名称,有些部门的名称可能是同名。就不能区分了。)
==像这样的字段,就符合外键的特点,就可以使用外键约束,使该字段只能够存储另一张表的主键。==
如果不被外键约束,那么该字段就无法保证存储进来的值就一定是另一张表的主键值。
其他的约束遇见的不是很多,参考
MySQL(一) 数据表数据库的基本操作
==删除表的外键约束==
ALTER TABLE<表名称> DROP FOREIGN KEY<外键约束名>
外键约束名指的不是被外键约束修饰的字段名,切记,而是我们在创建外键约束关系时取的名字。即上面出现的 tableA_tableB_1
==删除被其他表关联的主表==
在有外键关联关系的两张表中,如果删除主表,那么是删不掉的,并且会报错。因为有张表依赖于他。那怎么办呢?针对这种情况,总共有两种方法:
先删除你子表,然后在删除父表,这样就达到了删除父表的目的,但是子表也会被删除
先解除外键关系,然后在删除父表,这样也能达到目的,并且保留了子表,只删除我们不需要的父表
MySQL主键自增长
在MySQL里,当主键定义为自增长后,主键的值就不需要自己再输入数据了,而是由数据库系统根据定义自动赋值,
在默认的情况下,AUTO_INCREMENT的初始值为1,每新增一条记录,字段值就会自动加1;如果达到上限,AUTO_INCREMENT就会失效。
一个表中只能有一个字段使用AUTO_INCREMENT约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分);
AUTO_INCREMENT约束的字段只能是整数类型;
此时可以不用再手动插入st_id的数据,id随着用户输入的个数自动增加.
但是在设置学号的时候不一定是从1开始的,比如从2000150001开始,则需要在建表之后设置自增的起始数据.即在最后一个括号和;之间插入
auto_increment=2001150006,此时,st_id就会从2001150006开始依次递增.
还有其他的一些语法:
插入数据:INSERT[INTO] user(username,password) VALUES(‘admin’,’admin’);
修改数据:UPDATE table_name SET col_name=value,…[WHERE 字段=字段值]
查询数据:SELECT user,password FROM user WHERE 字段=字段值
删除数据:DELETE FROM table_name where 字段=字段值