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语句执行

 

 

热门相关:洪荒二郎传   道君   回眸医笑,冷王的神秘嫡妃   回眸医笑,冷王的神秘嫡妃   天神诀