1.连接数据库

通过命令连接远程数据库(配置了mysql的环境变量):

mysql -hIP -P端口号 -u用户名 -p密码
如:
mysql -h192.168.5.116 -P3306 -uroot -p1234562 

基本操作

mysql -uroot -p123456 --连接本地数据库
--进入mysql后:
update mysql.user set authentication_string=password('新密码') where user='root' and Host=localhost; --修改用户密码
flush privileges;  --刷新权限

-------------------------------------------------------
--注:所有的语句都用分好 ; 结尾
mysql> show databases;   ---查看所有数据库、

mysql> use school   ---切换数据库  user 数据库名
Database changed 

mysql> show tables; ----查看当前数据库中的所有的表
+------------------+
| Tables_in_school |
+------------------+
| student          |
+------------------+
1 row in set (0.00 sec)

mysql> desc student;  ----显示表的所有数据信息 desc=describe
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(10)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | NO   |     | NULL    |                |
| age   | int(3)       | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> create database sovzn; ---创建数据库
Query OK, 1 row affected (0.10 sec)

mysql> exit; ---退出数据库连接
Bye

mysql> show create database school; --查看创建数据库school的语句
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| school   | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table student;----查看创建表student的语句
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `age` int(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

数据库语言 CRUD

DDL 定义语言

DML 操作语言(增删改)

DQL 查询语言

DCL 控制语言

操作数据库

1.创建数据库:

CREATE DATABASE [IF NOT EXISTS] sovzn

2.删除数据库:

DROP DATABASE [IF EXISTS] sovzn

3.使用数据库:

注意:如定义的数据库名或表名是一个关键字,则需要给数据库名加 `` (TAB 上面的键)

USE `sovzn`

数据库中的列类型

数值
tinyint 十分小的数据 1个字节
smallint 较小的数据 2个字节
mediumint 中等大小的数据 3个字节
int 标准的整数 4个字节
bigint 较大的数据 8个字节
float 浮点数 4个字节
double 浮点数 8个字节
decimal 字符串形式的浮点数,金融计算时一般使用

字符串
char 字符串固定大小 0 ~255
varchar 可变字符串 0~65535,常用的变量对应java中的String类型
thiytext 微型文本 2^8-1
text 文本串 2^16 -1
时间日期
java.util.Date
date YYYY-MM-DD 日期格式
time HH:mm:ss 时间格式
DateTime YYYY-MM-DD HH:mm:ss 最常用的时间格式
timetamp 时间戳 : 1970.1.1到现在的毫秒
year 年份表示

数据库中的字段属性

Unsigned 无符号整数,声明该列不能为负数
zerofill 0填充,不如定义的是三位整数,若输入的是1,则会自动将结果填充为001

数据表的类型

关于数据表的引擎(主要说明两种)

INNODB:默认使用(行锁

MYISAM:早期使用的(表锁,十分影响效率!高并发下就会出现严重的锁问题

MYISAM INNODB
事务的支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 支持(5.7以后)
表空间的大小 较小 较大,约为MYISAM的两倍

在物理存储上的区别:

所有的数据库文件都存在data目录下,一个文件夹就代表一个数据库,本质还是文件的存储!

innoDB:在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件( *代表表名)

MYISAM 对应文件有:

  • *.frm —表结构的定义
  • *.MYD —数据文件(data)
  • *.MYI —索引文件(index)

设置数据表的字符集编码

不设置的话,会使用mysql默认的字符集编码:Latin1(不支持中文)

方法如下:

  1. 在创表语句里面声明:
CHARSET=utf8  --或在使用SQLyog等可视化工具创表时指明字符集编码
  1. 在mysql的配置文件my.ini中修改默认编码:

    character-set-server=utf8

    修改数据表

    ---修改表名; ALTER TABLE 旧表名  RENAME AS 新表名
    ALTER TABLE teacher RENAME AS teacher1
    
    ---增加表的字段:ALTER TABLE 表名 ADD 字段名  列属性
    ALTER TABLE teacher1 ADD age INT(3)
    
    ---修改字段(修改约束,重命名)
    ---ALTER TABLE 表名 MODIFY 字段名 列属性
    ALTER TABLE teacher1 MODIFY age VARCHAR(11) --修改约束,将age字段的列属性改为 VARCHAR(11)
    --- ALTER TABLE 表名 CHANGE 旧字段名  新字段名  列约束    
    -- 注:使用change时,可以在修改字段名的同时修改列属性,如下;
    ALTER TABLE teacher1 CHANGE age age1 INT(2) --将字段age重命名为age1并且列属性改为INT[2]
    ALTER TABLE teacher1 CHANGE age1 age2 INT(2) --将字段age1重命名为age2并且列属性不变
    
    --删除表的字段:ALTER TABLE 表名 DROP 字段名
    ALTER TABLE teacher1 DROP age1
    --删除表
          DROP TABLE IF EXISTS teacher1

    MYSQL 数据管理

    外键

    外键的作用:

    保持数据一致性完整性,主要目的是控制存储在外键表中的数据,约束。使两张表形成关联,外键只能引用外表中的列的值或使用空值。

创建外键

1.在建表时创建外键

-- 创建外键的方式一 : 创建子表同时创建外键
 
-- 年级表 (id\年级名称)
CREATE TABLE `grade` (
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
  PRIMARY KEY (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
 
 
 
-- 学生信息表 (学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
  `studentno` INT(4) NOT NULL COMMENT '学号',
  `studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
  `sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
  `gradeid` INT(10) DEFAULT NULL COMMENT '年级',
  `phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
  `address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
  `borndate` DATETIME DEFAULT NULL COMMENT '生日',
  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
  `idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`studentno`),
    ------------------------------------------------------------------------
  KEY `FK_gradeid` (`gradeid`),
  CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
    --------------------------------------------------------------------------
) ENGINE=INNODB DEFAULT CHARSET=utf8
  1. 在建表后创建外键
-- 创建外键方式二 : 创建子表完毕后,修改子表添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);

注意:删除有外键关系的表时,必须先删除从表(有外键的表),再删除主表(被引用的表)

以上方式所创建的是物理外键,数据库级别的外键,我们不建议使用(为了避免数据库过多造成困扰),我们若想使用多张表的数据,也就是外键,一般使用程序去实现。