标签 数据库 下的文章

小编目前也米有发现比较好的卸载方式,只能删除mysql的相关目录。

 sudo rm /usr/local/mysql

 sudo rm -rf /usr/local/var/mysql

 sudo rm -rf /usr/local/mysql*

 sudo rm -rf /Library/StartupItems/MySQLCOM

 sudo rm -rf /Library/PreferencePanes/My*

 vim /etc/hostconfig and removed the line MYSQLCOM=-YES-rm -rf ~/Library/PreferencePanes/My*

 sudo rm -rf /Library/Receipts/mysql*

 sudo rm -rf /Library/Receipts/MySQL*

 sudo rm -rf /var/db/receipts/com.mysql.*

小编今天装了个mysql5.7最后一步直接点击了OK,然后就没记住密码。小编在这里提供下重置mysql密码的方法。

  • 首先关闭mysql服务器

    sudo /usr/local/mysql/support-files/mysql.server stop
  • 进入mysql的bin目录

    cd /usr/local/mysql/bin
  • 获取root权限

    sudo su
  • 重启mysql服务器

    ./mysqld_safe --skip-grant-tables &
  • 退出,直接按command+D
  • 配置短命令

    alias mysql=/usr/local/mysql/bin/mysql
  • 连接数据库

    mysql
  • 切换数据库

    use mysql
  • 获取权限

    flush privileges;
  • 重置密码

    set password for 'root'@'localhost'='root'('新密码');

    好了,大功告成,退出mysql,重新用新密码登录就可以了。

小编今天要往mysql中,导入一个接近1G的数据。通过mysql的图形化工具发现导入的很慢,预计市场需要4个小时左右(可能是小编的电脑性能不佳。哈哈)。这也太耽误事了,后来发现我们可以通过source命令。
操作方法:

# 选择数据库
use 数据库名;
# 导入数据(后面跟着SQL文件的路径即可)
source d:/test.sql;

首先我们先来了解下spu和sku这两个的概念。
spu:指的是商品,spu属性就是不会影响到库存和价格的属性, 又叫关键属性,与商品是一对一的关系。
sku:指的是具体规格单品,sku属性就是会影响到库存和价格的属性, 又叫销售属性,与商品是多对一的关系。
我们就拿小米9来举例子
小米9
机身颜色:全息幻彩蓝,深空灰,全息幻彩紫
存储容量:6+128G,8+128G,8+256G
spu就是指商品:小米9
sku就是指具体规格单品:全息幻彩蓝 8+128G等
sku一共有33=9个(机身颜色种类存储容量种类)

下面我们来设计模型
一般情况下我们使用5张表就可以解决基本的需求了:

  • 商品分类表:category
  • 商品表(即:spu表):product
  • 商品规格表(即:sku表):product_specs
  • 属性key表:attribute_key
  • 属性value表:attribute_value

商品分类表:category

  • 该表主要是描述商品的分类。
  • 属性:id,parent_id,name等

商品表(即:spu表):product

  • 存储商品信息
  • 属性:id,category_id,name,attribute_lise等

商品规格表(即:sku表):product_specs

  • 存储商品的具体规格单品,即sku
  • 属性:id,product_id,product_specs等

属性key表:attribute_key

  • 用于存储sku的属性,比如:机身颜色,存储容量

属性value表:attribute_value

  • 用于存储sku的属性值,比如:6+128G,8+128G,8+256G

出现这种情况首先检查你的SQL是否存在问题,确定没有问题的话,就是Mysql可能正在执行其他消耗资源的操作,在确保不会影响业务的情况下我们可以杀掉正在执行的任务。

  • 查看正在执行的任务:show full processlist; 可能会显示很多,不确定是哪一个的时候就全部停止。
  • 停止正在执行的任务:kill processid;processid就是刚才查出来的。

如果这样还是不能解决问题,那么你可以试着重启下mysql,这样所有的任务就会停止了。

  • linux的重启mysql命令:

    • 使用 service 启动:service mysql restart
    • 使用 mysqld 脚本启动:/etc/inint.d/mysql restart
  • windows的重启mysql

    • 停止MySQL:net stop mysql
    • 启动MySQL:net start mysql

mysql.jpeg

小编今天帮朋友解决了一个数据库出现了一个数据库时区的错误问题:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time
解决办法:
控制台执行以下命令

show variables like '%time_zone%';
set global time_zone='+8:00';

delete删除的时候是一条一条的删除记录,它配合事务,可以将删除的数据找回。而且delete删除数据后,拥有自动增长约束的字段,将会自动增长,不会从1继续增长,而是继续以前的。
truncate删除,它是将整个表摧毁,然后再创建一张一模一样的表。它删除的数据无法找回。而且truncate删除数据后,拥有自动增长约束的字段,将会从1自动增长。

概念

JDBC(java database connectivity )SUN公司提供的一套操作数据库的标准规范。是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

  • JDBC与数据库驱动的关系:接口与实现的关系。
  • JDBC规范(掌握四个核心对象):

    DriverManager:用于注册驱动
    Connection: 表示与数据库创建的连接
    Statement: 操作数据库sql语句的对象
    ResultSet: 结果集或一张虚拟表

  • 实现JDBC操作

    1、注册驱动
    2、创建连接
    3、得到执行sql语句的Statement对象
    4、执行sql语句,并返回结果
    5、处理结果
    6、关闭资源

常用的类和接口

java.sql.Drivermanager类

作用:创建连接

1.注册驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用
原因
导致驱动被注册2次,并且强烈依赖数据库的驱动jar
解决办法:Class.forName("com.mysql.jdbc.Driver");

2.与数据库建立连接
方式一:(常用)

static Connection getConnection(String url, String user, String password) 

试图建立到给定数据库 URL 的连接。
示例:
getConnection("jdbc:mysql://localhost:3306/user", "root", "root");
注意:
URL:SUN公司与数据库厂商之间的一种协议。
jdbc:mysql://localhost:3306/user
协议 子协议 IP :端口号 数据库
mysql: jdbc:mysql://localhost:3306/user 或者 jdbc:mysql:///user(默认本机连接)
oracle: jdbc:oracle:thin:@localhost:1521:sid

方式二:

Properties info = new Properties();//要参考数据库文档
info.setProperty("user", "root");
info.setProperty("password","root");
getConnection(String url, Properties info);
getConnection(String url);

方式三:

DriverManager.getConnection("jdbc:mysql://localhost:3306/user?user=root&password=root");

java.sql.Connection接口

作用:建立一个连接
注意:接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。
方法:Statement createStatement(); //创建操作sql语句的对象

java.sql.Statement接口

作用:操作sql语句,并返回相应结果的对象
注意:接口的实现在数据库驱动中。用于执行静态 SQL 语句并返回它所生成结果的对象。
方法:
1.ResultSet executeQuery(String sql) 根据查询语句返回结果集。只能执行select语句。
2.int executeUpdate(String sql) 根据执行的DML(insert update delete)语句,返回受影响的行数。
3.boolean execute(String sql) 此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;

注意:为防止SQL注入一般使用preparedStatement方法
preparedStatement:预编译对象, 是Statement对象的子类。
特点:

  • 性能要高;
  • 会把sql语句先编译;
  • sql语句中的参数会发生变化,过滤掉用户输入的关键字。

java.sql.ResultSet接口

作用:处理结果集
方法及作用

1.封装结果集的

  • 提供一个游标,默认游标指向结果集第一行之前。
  • 调用一次next(),游标向下移动一行。
  • 提供一些get方法。

封装数据的方法
Object getObject(int columnIndex); 根据序号取值,索引从1开始
Object getObject(String ColomnName); 根据列名取值。

2.将结果集中的数据封装到javaBean中

java的数据类型与数据库中的类型的关系

byte          tityint
short         smallint
int           int
long          bigint
float         float
double        double
String        char varchar 
Date         date

常用方法

  • boolean next()将光标从当前位置向下移动一行
  • int getInt(int colIndex)以int形式获取ResultSet结果集当前行指定列号值
  • int getInt(String colLabel)以int形式获取ResultSet结果集当前行指定列名值
  • float getFloat(int colIndex)以float形式获取ResultSet结果集当前行指定列号值
  • float getFloat(String colLabel)以float形式获取ResultSet结果集当前行指定列名值
  • String getString(int colIndex)以String 形式获取ResultSet结果集当前行指定列号值
  • String getString(String colLabel)以String形式获取ResultSet结果集当前行指定列名值
  • Date getDate(int columnIndex);以int形式获取Date结果集当前行指定列名值
  • Date getDate(String columnName); 以Date形式获取Date结果集当前行指定列名值
  • void close()关闭ResultSet 对象

可移动游标的方法

  • boolean next() 将光标从当前位置向前移一行。
  • boolean previous() 将光标移动到此 ResultSet 对象的上一行。
  • boolean absolute(int row) 参数是当前行的索引,从1开始,根据行的索引定位移动的指定索引行。
  • void afterLast() 将光标移动到末尾,正好位于最后一行之后。
  • void beforeFirst() 将光标移动到开头,正好位于第一行之前。

关闭资源

对象名.close();

注意:从小向大关闭。

小编在这里只向大家介绍一种常用的方式,其他方式就不做介绍了。

导出数据

生成SQL脚本
在控制台使用mysqldump命令可以用来生成指定数据库的脚本文本,但要注意,脚本文本中只包含数据库的内容,而不会存在创建数据库的语句!所以在恢复数据时,还需要自已手动创建一个数据库之后再去恢复数据。
  

mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径

注意:mysqldump命令是在Windows控制台下执行,无需登录mysql。

恢复数据

执行SQL脚本
前提:必须先创建数据库名

  • 方式一:

执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本!

SOURCE [要执行脚本文件路径]


  注意:在执行脚本时需要先行核查当前数据库中的表是否与脚本文件中的语句有冲突!例如在脚本文件中存在create table a的语句,而当前数据库中已经存在了a表,那么就会出错!

  • 方式二:

通过下面的方式来执行脚本文件,这种方式无需登录mysql。

mysql –u用户名 –p密码 数据库<要执行脚本文件路径

这也是执行sql脚本文件的方法。

数据的完整性

作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性 = 在创建表时给表中添加约束
完整性的分类

  • 实体完整性
  • 域完整性
  • 引用完整性
  • 用户自定义完整性

实体完整性

实体:即表中的一行(一条记录)代表一个实体(entity)
作用:标识每一行数据不重复。
约束类型: 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment)

  • 主键约束(primary key)

注:每个表中要有一个主键。
特点:数据唯一,且不能为null
例:
第一种添加方式:

CREATE TABLE student(
id int primary key,
name varchar(50)
);

第二种添加方式:此种方式优势在于,可以创建联合主键

CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);
CREATE TABLE student(
classid int,
stuid int,
name varchar(50),
primary key(classid,stuid)
);

第三种添加方式:

CREATE TABLE student(
id int,
name varchar(50)
);
ALTER TABLE student  ADD  PRIMARY  KEY (id);
  • 唯一约束(unique)

特点:数据不能重复。

CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);
  • 自动增长列

注意:mysql数据库((auto_increment)sqlserver数据库 (identity) oracle数据库( sequence)

给主键添加自动增长的数值,列只能是整数类型

CREATE TABLE student(
Id int primary key auto_increment,
Name varchar(50)
);

INSERT INTO student(name) values(‘tom’);

域完整性

作用:限制此单元格的数据正确,不对照此列的其它单元格比较
域代表当前单元格
约束:数据类型 非空约束(not null) 默认值约束(default)
check约束(mysql不支持)check(sex='男' or sex='女')

  • 非空约束:not null

    CREATE TABLE student(
    Id int pirmary key,
    Name varchar(50) not null,
    Sex varchar(10)
    );

    INSERT INTO student values(1,’tom’,null);

  • 默认值约束 default

    CREATE TABLE student(
    Id int pirmary key,
    Name varchar(50) not null,
    Sex varchar(10) default ‘男’
    );

    insert into student1 values(1,'tom','女');
    insert into student1 values(2,'jerry',default);

引用完整性(参照完整性)

  • 外键约束:FOREIGN KEY

例:

CREATE TABLE student(
sid int pirmary key,
name varchar(50) not null,
sex varchar(10) default ‘男’
);

create table score(
    id int,
    score int,
    sid int , -- 外键列的数据类型一定要与主键的类型一致
    CONSTRAINT fk_score_sid foreign key (sid) references student(id)
);

第二种添加外键方式

ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);

用户自定义完整性

反映某一具体应用所涉及的数据必须满足的语义要求。

表与表之间的关系

  • 一对一
  • 一对多(多对一)
  • 多对多: