今天在项目中要把加密之后的密文存入数据库,所以临时简洁的研究了一下linux下对mysql的操作。
1.登录数据库用到的命令:
$ mysql -u root -p
输入之后会提示对应用户root的密码,如图:
当输入密码时总是提示如下:
ERROR1698(28000):Access denied for user root@localhost
解决方法如下链接:
https://www.cnblogs.com/cpl9412290130/p/9583868.html
这位大佬已经解决的问题正是今天我遇到的问题,在此向前辈致敬!
2.建立一个名为zonghzha的用户:
CREATE USER 'zonghzha'@'localhost' IDENTIFIED BY '123456a';
一旦用户被创建后,包括加密的密码、权限和资源限制在内的所有帐号细节都会被存储在一个名为user的表中,这个表则存在于mysql这个特殊的数据库里。
3.首先用如下指令查看用户是否已经创建成功:
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
显示如下:
一个新建的MySQL用户没有任何访问权限,这就意味着你不能在MySQL数据库中进行任何操作。你得赋予用户必要的权限。
4.新创建一个数据库
CREATE DATABASE IF NOT EXISTS license;
5.我们想让用户'zonghzha'@'localhost'仅仅具有对license数据库的所有操作权限,命令如下:
grant all privileges on license. * to 'zonghzha'@'localhost';
flush privileges;
截图如下:
6.c语言中创建一个表的语句:
mysql_query(&connect, "CREATE TABLE IF NOT EXISTS points(id INT UNSIGNED AUTO_INCREMENT, code VARCHAR(300) NOT NULL, date TIMESTAMP NOT NULL, primary key (id))ENGINE=InnoDB DEFAULT CHARSET=utf8")
其中id为此表的主键,AUTO_INCREMNET表示每插入一条语句,id的值都会自增长。此处注意,在一个表中只有主键的值可以自增长。所以只是声明了id INT AUTO_INCREMNET并不能自动增长,还需下后面的一句 primary key (id)
date TIMESTAMP NOT NULL,意为date声明为时间戳格式,并且插入式不能为空。
此时执行如下命令,去查看标的结构:
desc points
表的结构显示如下:
在下图中可以看到自动增长之后的id和自动填充的时间:
如果要在数据库中记录此条数据插入的时间,那么要用到current_timestamp()。此处注意,只有前面创建表时被声明为TIMESTAMP的元素才可以用current_timestamp()。代码如下:
sprintf(sql_cmd, "INSERT INTO points (code, date)VALUES(\"%s\", current_timestamp())", code);
mysql_query(&connect, sql_cmd)
7.删除points表中的数据:
mysql> DELETE FROM points;
以上语句会删除points表中的所有数据。
8.在mysql的交互窗口删除一个表的命令如下:
drop table if exists runoob_tbl
截图看反馈: