MySQL学习1--基础
一、数据库常规概念
1、什么是数据库
数据库是“按照数据结构来组织、存储和管理数据的仓库”。
2、有哪些常见的数据库管理系统
关系型数据库:存储的数据是表结构的数据
MySQL Oracle SQLServer DB2 SQLite
非关系型数据库:存储的是键值对形式的数据
redis mongodb memorycache
3、数据库有哪些存储单位
数据库(Database)保存有组织的数据的容器(通常是一个文件或一组文件)。
数据表(Table)某种特定类型数据的结构化清单。
列(Column)表中的一个字段。所有表都是由一个或多个列组成的。
行(Row)表中的一个记录。
4、什么是SQL语句
SQL是Structured Query Language(结构化查询语言)的缩写,SQL是一种专门用来与数据库沟通的语言,是一种从数据库中读写数据的简单有效的方法。
二、对数据库及表的基础操作
1、连接数据库服务器 mysql -hlocalhost -uroot -p123456
2、2.退出服务器 exit
3、查看所有的数据库 show databases;
4、创建一个数据库 create database java;
5、删除数据库 drop database java;
6、选中进入数据库 use java;
7、查看数据库java中所有的表 show tables;
8、在数据库java中建person表
create table person(id int, name varchar(32), age int, info text);
语法格式: create table 表名 (字段1 数据类型, 字段2 数据类型,...);
9、11.查看person表的结构 desc person;
10、删除表 drop table person;
11、修改表 语法格式: alter table 表名 +操作;
a、删除info字段 语法格式: alter table 表名 drop 字段;
alter table person drop info;
b、在当前表中添加字段 语法格式: alter table 表名 add 字段 数据类型;
alter table person add sex boolean;
c、修改某一个字段的数据类型 alter table 表名 modify 字段 新的数据类型;
alter table person modify name char(32);
d、同时修改字段名字和字段数据类型 语法格式: alter table 表名 change 老字段 新字段 新的数据类型;
alter table person change sex gender int;
二、MySQL常用数据类型
1、tinyint(n) 用于存储小整数值,括号内的n为字段的最大长度 。
例:tinyint(2)指定字段类型为整数,长度最大为2。
2、int(n)用于存储大整数值;括号内的n为字段的最大长度,可不写,默认11位
3、decimal(M,D)用于存储小数值,M为字段最大位数,D为小数点后最大位数。
例:decimal(9,3)指定字段最多9位,小数点后最多三位。
4、char(n) 用于存储字符串的定长字符串,字段长度固定占n位
5、varchar 用于存储字符串的变长字符串,字段最多n位
注:varchar与char的区别在于varchar的长度可变,字段实际需要几位便占几位,更能节省内存。
6、text 用于存储文本数据,varchar和char做大只能存储255个字符,超过255个字符的字符串只能以文本的形式存储。
7、timestamp、时间戳,用于存储混合日期和时间值。
alter table person add regTime timestamp default current_timestamp;
时间戳类型的一个字段如果将默认值设为current_timestamp,在写入一条数据时,这条数据的这个字段的默认值为变为写入数据的时间。
三、对表中数据的增删改操作
1、插入数据
语法:insert into 表名称 values (值1, 值2,....), 必须安照表的字段顺序写入全部对应类型数据
例: insert into person values(1, "盖伦", 12, 89272.78, 1,now());
或 insert into 表名称 (列1, 列2,...) values (值1, 值2,....) 后面的值需与前面的的保存对应,但前面的列的顺序可以随意,且不要求写出全部字段名,未出现的字段会符默认值。
例: insert into person (id, name, age, salary) values (2, "亚索", 34, 27288.98);
可一次插入多条数据,数据之间用“,”分隔
例: insert into person(id, name) values(4, "世齐"), (5, '永杰'),(6, "狗蛋");
2、删除数据
语法:delete from 表名称 where 列名称 = 值
例1:delete from person where id = 4;
例2:delete from person where name = "盖伦";
例3:delete from person where id in(2,3, 5); #删除id为2、3、5的数据
例4:delete from person; #表名后没有限制条件,删除表中所有数据。
3、修改数据
语法: update 表名称 set 列名称1 = 新值1,列2=新值2,列3=新值3.... where 列名称 = 某值
例: update person set name="盖伦", age = 89 where id = 1;
4、数据的约束
1、默认值 default
创建表时,如果一个字段声明了默认值(default),用户在插入的数据时候,如果没有给当前字段赋值,会给当前字段赋值一个默认值。例:
mysql> create table person2 ( -> id int, -> name varchar(32), -> country varchar(32) default "CHINA" -> ); Query OK, 0 rows affected (0.02 sec) mysql> desc person2; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(32) | YES | | NULL | | | country | varchar(32) | YES | | CHINA | | +---------+-------------+------+-----+---------+-------+ mysql> insert into person2(id, name) values(1, "盖伦"); Query OK, 1 row affected (0.00 sec) mysql> select * from person2; +------+--------+---------+ | id | name | country | +------+--------+---------+ | 1 | 盖伦 | CHINA | +------+--------+---------+ 1 row in set (0.00 sec)
2、非空 not null
如果给字段设置了非空,在添加数据的时候,必须给当前字段设置值。如果不设置会报错。例:
mysql> create table person3( -> id int, -> name varchar(32) not null -> ); Query OK, 0 rows affected (0.01 sec) mysql> desc person3; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(32) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+ mysql> insert into person3 (id, name) values(1, "sahj"); Query OK, 1 row affected (0.00 sec) mysql> insert into person3 ( name) values( "ss"); Query OK, 1 row affected (0.00 sec) mysql> insert into person3 (id) values(3); ERROR 1364 (HY000): Field 'name' doesn't have a default value mysql> select * from person3; +------+------+ | id | name | +------+------+ | 1 | sahj | | NULL | ss |
3、唯一 unique
设置字段的值是唯一的,如果添加数据的时候重复数据的话会报错。例:
mysql> create table person4 ( -> id int, -> name varchar(32) unique -> ); Query OK, 0 rows affected (0.02 sec) mysql> insert into person4(id, name) values(1, "嘻嘻"); Query OK, 1 row affected (0.01 sec) mysql> insert into person4(id, name) values(2, "嘻嘻"); ERROR 1062 (23000): Duplicate entry '嘻嘻' for key 'name' mysql>
4、主键 primary key
是唯一和非空的组合,
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。例:
#在设计数据库的时候,一定要有一个字段是主键,而且主键的字段一般和业务逻辑无关。name和age等容易重复不能设置为主键,开发中一般将id设置为主键 mysql> create table person5( -> id int primary key, -> name varchar(32) -> ); Query OK, 0 rows affected (0.01 sec)
mysql> insert into person5(name) values("嘻嘻"); ERROR 1364 (HY000): Field 'id' doesnot have a default value mysql> insert into person5(id, name) values(1,"嘻嘻"); Query OK, 1 row affected (0.00 sec) mysql> insert into person5(id, name) values(1,"嘻嘻"); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' mysql>
5、自增长 auto_increment
auto_increment 一般在开发中 主键设置为自增长,主键一旦设置为自增上,新增数据时不用填充主键字段,主键会自动在上一次插入数据时主键的值加1,填入这次的主键。例:
mysql> create table person7( -> id int primary key auto_increment, -> name varchar(20) -> ); Query OK, 0 rows affected (0.11 sec) #在插入数据的时候,如果主键设置自增长,就可以不对主键进行赋值了,会从1开始一直往下加1 mysql> insert into person5 (name) values("狗蛋"); Query OK, 1 row affected (0.05 sec) mysql> select * from person5; +----+--------+ | id | name | +----+--------+ | 1 | 狗蛋 | +----+--------+ 1 row in set (0.00 sec) mysql> insert into person5 (name) values("hanran"); Query OK, 1 row affected (0.06 sec) mysql> insert into person5 (name) values("nanhang"); Query OK, 1 row affected (0.04 sec) mysql> select * from person5; +----+---------+ | id | name | +----+---------+ | 1 | 狗蛋 | | 2 | hanran | | 3 | nanhang | +----+---------+ mysql> delete from person5 where id = 3; Query OK, 1 row affected (0.09 sec)
6、外键约束
表中的一个字段 作为一个外键,去关联另外一张部门表的主键,将两张表关联起来。
mysql> create table dept ( -> id int primary key auto_increment, -> deptName varchar(32) not null -> );
mysql> create table employee ( -> id int primary key auto_increment, -> empName varchar(32) not null, -> deptId int not null, -> regTime timestamp default current_timestamp, #constraint : 约束 #fk_emp_dep: 给外键起的名字 随便起名字 # foreign key(deptId): 外键 对哪个字段设置外键 当前表的 #references: 关联 #dept(id): 另外一张表中的主键 dept(id) -> constraint fk_emp_dep foreign key(deptId) references dept(id) #on delete cascade 级联删除 -> on delete cascade #on update cascade 级联修改 -> on update cascade -> );
5、事务的操作(入门)
使用事务的目的是保证数据的安全。
事务内的全部操作要么全部成功,要么全部失败。
例如:张三要转给李四100元,在数据库的具体操作分为两步
1、使张三账户减少100元;
2、使李四账户增加100元;
未使用事务时,在操作1完成后,如果有意外情况(如服务器宕机)导致转账操作不能继续进行第2步
就会出现转出了100元,李四却未收到的情况。
开启事务后,操作1完成后,操作结果不会直接提交,要等到后续操作全部成功后,所有结果一同提交,
若后续有某个操作因意外情况失败,则会对操作进行回滚,将一切回复到未开始操作的状态。
开启事务(即关闭自动提交)
set autocommit=0; #autocommit为0时自动提交关闭,为1时自动提交开启。
增删改sql 不会自动提交
会有两种状态:
回滚: roolbakc; 增删改sql语句没有执行
提交: commit; 增删改sql语句执行
热门相关:洪荒二郎传 道君 回眸医笑,冷王的神秘嫡妃 回眸医笑,冷王的神秘嫡妃 天神诀