一、数据库简介
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
二、专有名词
DBMS: 数据库管理系统(Database Management System是一种操纵和管理数据库的大型软件
DB:(Database)数据库
SQL: 结构化查询语言,(Structure Query Language),专门用来操作、访问数据库的通用语言
三、数据库类别
数据库共有3种类型,为关系数据库、非关系型数据库和键值数据库。
1、关系数据库
MySQL、MariaDB(MySQL的代替品,英文维基百科从MySQL转向MariaDB)、Percona Server(MySQL的代替品·)、PostgreSQL、Microsoft Access、Microsoft SQL Server、Google Fusion Tables、FileMaker、Oracle数据库、Sybase、dBASE、Clipper、FoxPro、foshub。
几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。
2、非关系型数据库(NoSQL)
BigTable(Google)、Cassandra、MongoDB、CouchDB。
3、键值(key-value)数据库
Apache Cassandra(为Facebook所使用):高度可扩展、Dynamo、LevelDB(Google)
四、SQL(Structure Query Language)
可以把 SQL 分为两个部分:
DML(Data Manipulation Language)数据操纵语言:
对数据库中的数据进行一些简单操作,如insert,delete,update,select等.
DDL(Data Definition Language)数据定义语言:
对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop
DCL(Data Control Language)(Orcale):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
五、MySQL
MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。
六、DDL(Data Definition Language)操作
对数据库操作
1.显示数据库
show databases;
2.创建数据库
create database exercise;
3.删除数据库
对表操作
1.创建表
创建表需要指定数据类型,需要了解MySQL数据类型
创建表格式 create table 表明(列名1 列1的数据类型, 列名2 列2的数据类型 , ...)
create table student(id int, name varchar(100), age int, gender char, score double, birthday date);
2.修改表名
alter table student rename stu;
3.查看表结构
desc 表名;
4.新增一列
alter table 表名 add 新增列名 列数据类型;
alter table users add username varchar(100);
mysql> alter table users add username varchar(100);
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| username | varchar(100) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
5.更改列名
alter table 表名 change 要更改的列名 列名 数据类型;
alter table users change username password varchar(100);
mysql> alter table users change username password varchar(100);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| password | varchar(100) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
6.修改列数据类型
alter table 表名 列名 列类型;
alter table users password int;
mysql> alter table users modify password int;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| password | int(11) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
7.删除一列
alter table 表名 drop 列名;
alter table users drop password;
mysql> alter table users drop password;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc users;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
插入数据
insert into 表名(字段) values(数据);
insert into users values(1, 'aa', 18);
insert into users(id,age) values(1, 18);
查询语句
select * from 表名;
select 字段 from 表名;
修改
update 表名 set 字段修改 where 查询条件;
删除
delete from 表名; 删除所有数据
delete from 表名 where 条件; 删除条件数据
truncate table 表名;清空表, 这里是直接把表删除,再创建一个同结构的, 不会破坏自增长
DML(Data Manipulation Language)数据操纵语言
对于为null的数据,判断条件需要用 is null 或者 is not null
select 列名 as 名字 from 表名; 对输出结果的列重命名
算数运算符
+ - * 、 % MOD
比较运算符
> >= < <= = != <>
逻辑运算符
与: && and
或 || or
非 ! not
模糊查询
like '模糊信息'
like '田%' %表示0到n个
like '田_' _表示一个
IFNULL 和hive 中的NVL coalesce一个含义
IFNULL(字段, 默认值) 如果字段的值为null, 则取默认值
约束条件和索引
主键约束 : 非空加唯一
唯一键 不能重复
外键: 多表关联的条件,
主键添加约束
create table student(id int primary key,name varchar(100), age int);
或者
create table student(
id int,
name varchar(100),
age int
primary key(id)
);
添加复合主键必须用第二种
复合主键, 多个主键,
后期添加主键约束
alter table student add primary key(id);
唯一键
create table student(
id int primary key
,name varchar(100) unique key
, age int);
另一种方式
create table student(
id int primary key
,name varchar(100)
, age int
,unique key(name, age)
);
alter table student add unique key(name);
非空约束
create table student(
id int primary key
,name varchar(100) not null
, age int);
只有这一种写法
alter table student modify 字段 字段类型 not null;
默认值
create table student(
id int primary key
,name varchar(100) default '你好'
, age int);
只有这一种写法
alter table student modify 字段 字段类型 default '你好';
自增长机制
一般加载到主键上
create table student(
id int primary key auto_increment
,name varchar(100) default '你好'
, age int);
外键
create table emp (
id int primary key auto_increment
,name varchar(100)
,age int
, dept_id
,foreign key(id) references dept(id)
);
,foreign key(id) references dept(id) on 后面跟级别
自带函数
单行函数
mysql> select concat('hello','world');
+-------------------------+
| concat('hello','world') |
+-------------------------+
| helloworld |
+-------------------------+
1 row in set (0.00 sec)
mysql> select concat_ws('-','hello','world','ni','hao');
+-------------------------------------------+
| concat_ws('-','hello','world','ni','hao') |
+-------------------------------------------+
| hello-world-ni-hao |
+-------------------------------------------+
1 row in set (0.00 sec)
mysql> select char_length('mysql数据库');
+----------------------------+
| char_length('mysql数据库') |
+----------------------------+
| 8 |
+----------------------------+
1 row in set (0.00 sec)
mysql> select length('mysql数据库');
+-----------------------+
| length('mysql数据库') |
+-----------------------+
| 11 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select insert('helloword',5,2,'aa');
+------------------------------+
| insert('helloword',5,2,'aa') |
+------------------------------+
| hellaaord |
+------------------------------+
1 row in set (0.00 sec)
mysql> select left('abcdfg', 2);
+-------------------+
| left('abcdfg', 2) |
+-------------------+
| ab |
+-------------------+
1 row in set (0.00 sec)
mysql> select right('abcdfg', 2);
+--------------------+
| right('abcdfg', 2) |
+--------------------+
| fg |
+--------------------+
1 row in set (0.00 sec)
mysql> select lpad('abc',6, 'dd');
+---------------------+
| lpad('abc',6, 'dd') |
+---------------------+
| dddabc |
+---------------------+
1 row in set (0.00 sec)
mysql> select rpad('abc',6, 'dd');
+---------------------+
| rpad('abc',6, 'dd') |
+---------------------+
| abcddd |
+---------------------+
1 row in set (0.00 sec)
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2021-03-20 |
+------------+
1 row in set (0.00 sec)
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 21:51:34 |
+-----------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2021-03-20 21:51:40 |
+---------------------+
1 row in set (0.00 sec)
mysql> select year(now());
+-------------+
| year(now()) |
+-------------+
| 2021 |
+-------------+
1 row in set (0.00 sec)
mysql> select dayofweek(now());
+------------------+
| dayofweek(now()) |
+------------------+
| 7 |
+------------------+
1 row in set (0.01 sec)
mysql> select date_add(now(), interval -2 year);
+-----------------------------------+
| date_add(now(), interval -2 year) |
+-----------------------------------+
| 2019-03-20 22:02:46 |
+-----------------------------------+
1 row in set (0.00 sec)
mysql> select date_add(now(), interval -2 month);
+------------------------------------+
| date_add(now(), interval -2 month) |
+------------------------------------+
| 2021-01-20 22:02:57 |
+------------------------------------+
1 row in set (0.00 sec)