数据库从零开始的学习day01

数据库

概念

存储数据和管理数据的仓库,主要分成两类:关系型数据库 和 非关系型数据库

关系型数据库:数据库建立在数据的紧密关系基础之上

非关系型数据库:数据库建立在数据的松散关系基础之上

安装

端口号默认3306,字符集改成UTF-8,密码root

配置环境变量

检查

mysql -u root -proot

mysql -u 用户名 -p密码

存储结构

表结构-行列—字段属性

SQL语句

SQL语言

概念:结构化查询语言,用来操作数据库,对库里的数据进行增删改查CRUD

是一种数据库查询和程序设计语言

数据库脚本文件的扩展名

分类

DML数据库操纵语言 CRUD manipulate

DDL:数据定义语言,创建库,创建表 definition

DCL:数据控制语言,分配具体数据操作权限 control

DQL数据查询语言,查询数据 query

如: insert, delete, select (插入,删除,膝盖,检索) 简称CRUD,新增Create、查询Retrieve、修改Delete

数据库常见操作

查询:show databases

新增:create database 库名

删除:drop database 库名(慎用)

注意:SQL不区分大小写

建库

创建数据库CGB2105并设置编码格式为utf8

MariaDB [(none)]> create database CGB2105 default character set utf8;

数据库从零开始的学习day01

使用数据库:use CGB2105;

MariaDB [(none)]> use cgb2105;
Database changed

表的常见操作

创建表

create table 表名(字段名 字段类型(字段长度),字段2,字段3...)

String -> Varchar

int -> int

double -> double

删除表

drop table 表名;

修改表

alter table 修改的表名 add column 属性名 类型(长度);

MariaDB [cgb2105]> alter table tb_door add column
    -> address varchar(100);

查看表

show tables;

MariaDB [cgb2105]> show tables;
+-------------------+
| Tables_in_cgb2105 |
+-------------------+
| house             |
| tb_door           |
+-------------------+
2 rows in set (0.000 sec)

desc 表名; describe

查看表的属性。

数据库从零开始的学习day01

表内的数据操作

添加数据

假设有四个属性1,2,3,4

insert into 表名 values("value 1","value 2"",value 3"",value 4");

MariaDB [cgb2105]> insert into tb_door values(1002,'Lineage','12345678','Lineage');
Query OK, 1 row affected (0.024 sec)

删除数据

delete from 表名;

MariaDB [cgb2105]> delete from tb_door;
Query OK, 2 rows affected (0.023 sec)

MariaDB [cgb2105]> select * from tb_door;
Empty set (0.000 sec)

修改数据

update 表名 set 属性名=属性新的值;

MariaDB [cgb2105]> update tb_door set door_name = 'name';
Query OK, 3 rows affected (0.026 sec)
Rows matched: 3  Changed: 3  Warnings: 0

MariaDB [cgb2105]> select * from tb_door;
+------+-----------+--------+---------+
| id   | door_name | tel    | address |
+------+-----------+--------+---------+
| 1001 | name      | 123456 | asd     |
| 1002 | name      | 123456 | asd     |
| 1002 | name      | 123456 | asd     |
+------+-----------+--------+---------+
3 rows in set (0.000 sec)

字符串类型一定要加 "" 或者 ‘ ‘,

int 类型加不加无所谓

查询数据

select 字段1,字段2,.../ * from 表名;

MariaDB [cgb2105]> select * from tb_door;
+------+-----------+-----------+----------+
| id   | door_name | tel       | address  |
+------+-----------+-----------+----------+
| 1001 | hell      | 123456789 | Infernal |
| 1002 | Lineage   | 12345678  | Lineage  |
+------+-----------+-----------+----------+
2 rows in set (0.001 sec)
MariaDB [cgb2105]> select id,door_name from tb_door;
+------+-----------+
| id   | door_name |
+------+-----------+
| 1001 | hell      |
| 1002 | Lineage   |
+------+-----------+
2 rows in set (0.000 sec)

客户端工具

操作数据库

创建库:库名和字符格式

操作表

创建表:设置属性值

操作表里数据

数据类型

命名规则

  • 字段名必须以字母开头,尽量不要使用拼音
  • 长度不能超过30个字符(不同数据库,不同版本会有不同)
  • 不能使用SQL的保留字,如where,order,group
  • 只能使用如下字符az、AZ、0~9、$ 等
  • Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name
  • 多个单词用下划线隔开,而非Java语言的驼峰规则

字符

  • char长度固定,不足使用空格填充,最多容纳2000个字符char(11)存储abc,占11位。查询速度极快但浪费空间
  • Varchar变长字符串,最多容纳4000个字符,Varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为Varchar
  • 大文本: 大量文字(不推荐使用,尽量使用Varchar替代)

数字

  • tinyint,int整数类型
  • float,double小数类型
  • numberic(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数
  • decimal和numeric表示精确的整数数字

日期

  • date 包含年月日
  • time时分秒
  • datetime包含年月日和时分秒
  • timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数

图片

  • blob 二进制数据,可以存放图片、声音,容量4G。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。

字段约束

*主键约束

主键约束:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键。

添加主键约束,例如将id设置为主键:

#没有约束,id值可以重复,可以是null
CREATE TABLE a(id int);
#设置主键,id值不能重复,不能是null
CREATE TABLE b(id int PRIMARY KEY);
#设置主键,自动递增
CREATE TABLE c(id int PRIMARY KEY auto_increment);
#非空约束:约束了字段的值不能为空
CREATE TABLE d(name VARCHAR(20));
CREATE TABLE e(name VARCHAR(20) NOT NULL);
#唯一约束:字段值不能重复
CREATE TABLE f(name VARCHAR(20));
CREATE TABLE g(name VARCHAR(20) UNIQUE);
上一篇:AutoResetEvent浅析


下一篇:关于分布式锁