数据库(DataBase)定义:长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据"仓库",用于保存和管理(即增删改查)数据,可以有效保障数据一致性、完整性、降低数据冗余,可以满足应用的共享和安全方面的要求
分类
1. 关系型数据库/SQL:MySQL,Oracle,SQL Server,SQLite,DB2 处于主流状态
特点是将数据按表的形式存在,且表与表之间存在关系,需要将数据放在一个服务器,最大优势是保持数据的一致性
2. 非关系型数据库/NOSQL: Redis,MongoDB
特点是数据分散在不同服务器,即使是大量数据写入,可以分散压力
DBMS(Database Management System): 数据库管理系统,科学组织和存储数据,高效获取和维护数据,增删改查是通过DBMS处理
MySQL特点:开源,免费,可跨系统运行,适用于windows和linux系统
mysql的常用命令,应用于虚拟机中配置的mysql,[]代表内容是可选择的命令,非必填项:
建立名为school的数据库 | create database [if not exists] school; |
删除名为school的数据库 | drop database [if exists] school; |
使用school数据库 | use school; |
查询所有表信息 | show table status; |
查看所有的库名单 | show databases; |
修改school库的字符编码 | alter database school character set ‘UTF8’; |
建school库时指定字符编码 | create database school character set ‘UTF8’; |
给外部访问授权,如JDBC无法连接数据库/两个数据库做主从复制,需使用 | grant all on *.* to 'root'@'%' identified by 'ok'; |
刷新 | flush privileges |
创建student表,拥有主键,两种加粗方法,任选其一 | create table student( id INT PRIMARY KEY , name VARCHAR(10), PRIMARY KEY (id) ); |
创建studentDemo,拥有主键,并包含student的外键约束,以及唯一约束 修改外键:先删除外键,再新增正确的外键 |
create table studentDemo( id INT, name VARCHAR(10), PRIMARY KEY (id), UNIQUE (name) ); |
在已有的studentDemo表中添加外键,主键,唯一键,索引 |
alter table studentDemo add constraint foreign key id references student; alter table studentDemo add primary key(id); alter table studentDemo add Unique(key_name); alter table student add index(key_name); |
删除外键,主键,唯一键,索引 | alter table studentDemo drop foreign key id; alter table studentDemo drop primary key; drop index key_name on student; drop index key_name on student; |
student和school,相互关联,在删除表的时候出错:Cannot delete or update a parent row: a foreign key constraint fails。 原因:表关联生成的强制约束问题,在删除的时候回检查表之间的关联关系,从而导致无法删除,处理方法如右图 |
a. SET foreign_key_checks = 0; // 先设置外键约束检查关闭 b. drop table student; // 删除表,如果要删除视图,也是如此 c. SET foreign_key_checks = 1; // 开启外键约束检查,以保持表结构完整性 |
将test查询结果导入或复制到 test_copy表 | create table test_copy select * from test; create table test_copy as select * from test; |
将test表的数据结构克隆到test_clone表 | create table test_clone like test; |
复制旧表的表格结构(包含表头),不包括具体表格数据 | create table studentDemo as select * from student where 1=0; |
查看student表结构 | DESC student; |
删除表全部数据和表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM | drop table student; |
删除表全部数据,保留表结构,立刻释放磁盘空间 ,不管是 Innodb 和 MyISAM; | truncate table student; |
删除表全部数据,表结构不变,对于 MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间; | delete from student; |
带条件的删除,表结构不变,不管是 innodb 还是 MyISAM 都不会释放磁盘空间; | delete from student where xxx; |
查看student表格,位于school数据库 | show tables student [in school]; |
查看student表的建表语句 | show create table student; |
查看student表的全部内容 | select * from student; |
显示当前用户id 显示当前用户 显示当前mysql版本 |
select connection_id(); select user(); select version(); |
声明语句结束符 | DELIMITER $$ |
查询数据库中有多少张表 | SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'azkaban' GROUP BY table_schema; table_schema = 'azkaban'——azkaban指的是数据库名 |
更改表名student为stu | ALTER TABLE student RENAME stu; RENAME TABLE student TO stu; |
添加表的字段名score | alter table student add score int(2); |
删除表字段score | alter table student drop score; |
更改表字段age为stuage,表字段属性设为int | alter table student change name |
只更改表字段属性 | alter table student modify age varchar(5); |
新增行数据 | insert into student values (1, 'alpha'), (2, 'beta'), (3, 'delta'); |
增加查询之后的表数据 | insert into student select * from student; |
删除id=2的行数据 | delete from student where id=2; |
更改id=1的行数据name为HHH | update student set name='HHH' where id=1; |
筛选不在student范围的学生数据 | select * from result where stuId not in (select stuId from student); |
查询去除重复name数据之后的student数据 | select distinct name from student; SELECT DISTINCT name FROM test; |
根据表 |