mysql入门
mysql与sql指令
参考文献:http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c1
Mac上安装
$ brew install mysql $ mysql server start $ mysql.server stop 如果mysql server 无法启动的话,可以使用: $ mysqld $ mysql 配置mysql 启动mysql $ mysqld //改命令可以直接启动mysql $ mysql.server start 该命令也可以直接启动mysql 启动mysql命令行,该命令启动mysql后直接进入mysql命令行模式 若要进入该模式,必须先启动mysql $ mysql // MySQL服务器启动错误 'The server quit without updating PID file' http://pein0119.github.io/2015/03/25/MySQL%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%AF%E5%8A%A8%E9%94%99%E8%AF%AF-The-server-quit-without-updating-PID-file/ 遇到该问题,我是使用这一条解决的: 1.我通过检查我的旧mac发现/usr/local/var/mysql/的所有者是xxx 2.但是启动报错的那台mac检查发现/usr/local/var/mysql/的所有者是root 3.于是执行 sudo chown -R yxt /usr/local/var/mysql/ ytx为本台mac的用户名。 于是这个纠结了大半年的问题终于迎刃而解。 执行mysqld后: ..... 2016-11-12 21:29:00 33202 [Note] - '::' resolves to '::'; 2016-11-12 21:29:00 33202 [Note] Server socket created on IP: '::'. 2016-11-12 21:29:00 33202 [Note] Event Scheduler: Loaded 0 events 2016-11-12 21:29:00 33202 [Note] mysqld: ready for connections. Version: '5.6.27' socket: '/tmp/mysql.sock' port: 3306 Homebrew 这段运行是多么优雅啊! 所以让我再次认识到服务器编程,除了是路径之外,还是权限!是路径+权限。 使用mysql.server start 启动
安装好之后Mac上的一些配置
1. mysql启动 $ sudo mysqld #先启动mysqld $ sudo mysql #启动mysql 2.mysql 安装路径(这里安装了mysql的全部数据库) /usr/local/var/mysql 3. 寻找mysql配置文件路径 ➜ ~ mysql --help | grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf 4.
使用Mysql数据库
$ mysql -D xxx(数据库名) -h hostxx -u 用户名 -p $ use xxx数据库名
SQL
1. 建库 CREATE DATABASE test; 2. 建表 CREATE TABLE `cat_diary` ( ) COMMENT '日记列表' VARCHAR 可存储65532字节大小,长文 CHAR NOT NULL (非空也占空间) if null TINYINT(1) 布尔类型,0,1 AUTO_INCREMENT PRIMARY KEY 主键 DEFAULT '' 或者0 utf8mb4 COLLATE 允许表情符号,二者组合使用 COMMENT 注释 text 2M存储大小 除非长文,博文 deleted created_at updated_at 必备字段 3.建索引 INDEX CREATE INDEX idx_cat_dairy_comment_cat_diary_id_user_id_parent_id ON cat_diary_comment(cat_diary_id, user_id, parent_comment_id); 索引类型:主键索引,unic索引 (索引写入的时候慢,读操作快) 一张表不要超过五个 索引失效:NULL判断会失效,具体有九种场景索引会失效,尽量避免 where 和 groupby 后的字段一般要建立索引 4. 数据库权限管理表,会去掉delete,防止物理删除 6. `cat_proverb` 数据库引号,保留关键字,需要引号 7. 导入数据库 source xxxpath 8. 导出数据库 mysqldump -uroot -p dbname tablename > xxx.sql 9.数据库命令 更新 UPDATE user SET deleted = 1 WHERE id=99 插入 INSERT user (id, type) VALUES () 查询 去重 group by left join 左关联 right join右关联 full join SELECT * FROM cat c LEFT JOIN user u ON c.user_id=u.id 求和 sum SELECT sum(fishty) from cat_diary 计数 count 条件查询 where != <> = AND OR NOT 尽量在字段中不要出现NULL 模糊查询、包含 like. like '%豆%' 关联所有有豆的数据, '%豆' 以豆结尾, 右模糊会导致关联失效。 搜索联想一般不是查询数据库,而是用搜索引擎 子查询(效率较慢) 10. top N 前N条数据 limit 同理 11.
sql实战
<pre class="md-fences md-end-block" lang="php" contenteditable="false" cid="n313" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 0.9em; white-space: pre; display: block; break-inside: avoid; text-align: left; background: var(--code-block-bg-color); background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(221, 221, 221); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;"><?php // 连接数据库 $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'xxx'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if (!$conn) { die('Could not connect: '. mysqli_error()); } echo '数据库连接成功'; // 创建数据库 $sql = 'CREATE DATABASE IF NOT EXISTS RUNOOB'; $retval = mysqli_query($conn, $sql); if (!$retval) { die('创建数据库失败: ' . mysqli_error($conn)); } echo "数据库RUNOOB 创建成功\n"; // 创建数据表 mysqli_select_db($conn, 'RUNOOB'); $createTable = "CREATE TABLE runoob_tbl(". "runoob_id INT NOT NULL AUTO_INCREMENT, ". "runoob_title VARCHAR(100) NOT NULL, ". "runoob_author VARCHAR(40) NOT NULL, ". "sumission_date DATE, ". "PRIMARY KEY ( runoob_id )) ENGINE=InnoDB DEFAULT CHARSET=utf8;"; $createR = mysqli_query($conn, $createTable); if (!$createR) { die('数据表创建失败:'. mysqli_error($conn)); } echo "数据表创建成功\n"; // 删除数据表 || 删除表数据 $deleteTable = "DROP TABLE runoob_tbl"; $deledata = "DELETE FROM runoob_tbl where runoob_id=1"; // delete from 表名 where 删除条件; // truncate table 表名; // drop table 表名; // 插入数据 $insertSql = "INSERT INTO runoob_tbl" . "(runoob_title, runoob_author, submission_date) ". "VALUES ". "('学习python', '高龙')"; // 关闭数据库 mysqli_close($conn); ?> </pre>
- 实战之查询user表